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