指定类型或对象的对齐要求。
alignas(表达式)
alignas( type-id )
alignas( pack ... )
alignas(expression)
必须是整数常量表达式,其值为零,或者为比对或扩展比对的有效值。
等同于alignas(alignof(type))
等同于应用于同一声明的多个alignas修饰符,每个参数包成员一个,可以是类型参数包或非类型参数包。
那么为什么以下代码不适用于g ++,clang或VC ++?
struct alignas(1, 4) A {};
或
struct alignas(int, double) A {};
这是缺陷吗?
显然,此方法适用于g ++ 8.2,而不适用于clang ++ 8.0或VC ++ 19.20.27508.1,因此似乎是一个缺陷,并且编译器尚未解决。
显然,在cygwin bash shell中运行MinGW的g ++编译器会导致奇怪的行为。在MinGW的bash shell中运行时效果很好。因此,不,这在g ++ 8.2下也不起作用。
答案 0 :(得分:2)
1, 4
或int, double
不是参数包。这将是在此上下文中使用的参数包的示例:
template <class... T>
struct Widget
{
struct alignas(T...) A {};
};
请注意,可以对同一个声明应用多个alignas
指定符,因此您的示例可以分别写为alignas(1) alignas(4)
和alignas(int) alignas(double)
。