在 C++11 中,我们现在有了alignas
关键字,它可以用来定义一个新类型,它只是一个现有类型,但具有更严格的对齐方式,例如通过 typedef:
typedef char Maximally_Aligned_Char alignas( max_align_t );
有没有办法以编程方式,给定 atypename T
来确定类型的原始“自然”对齐方式?类似于以下natural_alignment_of
可以编译的概念 type_trait :
size_t natural_char_alignment = natural_alignment_of< Maximally_Aligned_Char >::value;
static_assert( natural_char_alignment == alignof( char ) );
背景:
我正在编写模板代码以作用于所有标量类型。一般来说,整数( sizeof( T ) == alignof( T ) )
是正确的,但在官方alignas
支持下,我认为我不能再做这个假设了。
推测:
也许类似的东西std::decay
会起作用?测试代码,我看到 G++4.8 警告“忽略模板参数上的属性”,这听起来不错但很危险。