aligned_union 类

提供足够大并适当对齐的 POD 类型,以存储所需大小的联合类型。

语法

template <std::size_t Len, class... Types>
struct aligned_union;

template <std::size_t Len, class... Types>
using aligned_union_t = typename aligned_union<Len, Types...>::type;

参数

Len
联合中的最大类型的对齐值。

类型
基础联合中的不同类型。

注解

使用此类模板来获取对齐方式和在未初始化的存储中存储一个联合所需的大小。 成员 typedef type 为 Types 中列出的任何类型的存储命名一个合适的 POD 类型;最小大小为 Len。 类型 std::size_t 的静态成员 alignment_value 包含 Types 中列出的所有类型所要求的最严格的对齐方式。

示例

以下示例演示如何使用 aligned_union 来分配对齐的堆栈缓冲区以放置联合。

// std__type_traits__aligned_union.cpp
#include <iostream>
#include <type_traits>

union U_type
{
    int i;
    float f;
    double d;
    U_type(float e) : f(e) {}
};

typedef std::aligned_union<16, int, float, double>::type aligned_U_type;

int main()
{
    // allocate memory for a U_type aligned on a 16-byte boundary
    aligned_U_type au;
    // do placement new in the aligned memory on the stack
    U_type* u = new (&au) U_type(1.0f);
    if (nullptr != u)
    {
        std::cout << "value of u->i is " << u->i << std::endl;
        // must clean up placement objects manually!
        u->~U_type();
    }
}
value of u->i is 1065353216

要求

标头:<type_traits>

命名空间: std

另请参阅

<type_traits>
alignment_of Class