<type_traits>

类模板
<type_traits>

std::aligned_storage

template <size_t Len, size_t Align = /* default alignment */>struct aligned_storage;
对齐存储
获取一个适合用作对象存储的POD类型,其大小至多为Len字节,并按照Align.

指定的进行对齐。获取的类型被别名为成员类型aligned_storage::type.

如果已知Align被省略时,将使用不大于Len作为默认对齐方式。的任何C++对象类型的最严格对齐要求。

模板参数

Len
存储对象的大小(以字节为单位)。
此值不得为零。
size_t 是一个无符号整数类型。
Align
请求的对齐方式(以字节为单位)。实际使用的对齐方式可能是此值的除数。
size_t 是一个无符号整数类型。

成员类型

成员类型定义
类型一个适合存储的POD类型Len字节,并按照Align.

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// aligned_storage example
#include <iostream>
#include <type_traits>

struct A {  // non-POD type
  int avg;
  A (int a, int b) : avg((a+b)/2) {}
};

typedef std::aligned_storage<sizeof(A),alignof(A)>::type A_pod;

int main() {
  A_pod a,b;
  new (&a) A (10,20);
  b=a;
  std::cout << reinterpret_cast<A&>(b).avg << std::endl;

  return 0;
}

输出
15


另见