根据cppreference.com

alignas说明符(自C++ 11起)

指定类型或对象的对齐要求。

句法

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,因此似乎是一个缺陷,并且编译器尚未 catch 。

    编辑

    显然,在cygwin bash shell中运行MinGW的g++编译器会导致奇怪的行为。在MinGW的bash shell中运行时效果很好。因此,不,这在g++ 8.2下也不起作用。

    最佳答案

    1, 4int, double不是参数包。这将是在此上下文中使用的参数包的示例:

    template <class... T>
    struct Widget
    {
      struct alignas(T...) A {};
    };
    

    请注意,可以将多个alignas说明符应用于同一声明,因此您的示例可以分别写为alignas(1) alignas(4)alignas(int) alignas(double)

    09-28 08:44