【发布时间】:2019-09-06 12:59:34
【问题描述】:
对齐说明符(C++11 起)
指定类型或对象的对齐要求。
语法
alignas( 表达式 )
alignas( type-id )
alignas( 包 ... )
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 下也不起作用。
【问题讨论】:
-
GCC 8.2 seems to reject 代码。
-
@Fureeish,不适合我。在我的家用电脑上运行良好。
-
你能分享你的编译标志吗?和确切的代码?能不能粘贴到godbolt上,选择相同的编译选项,指定结果是否一样?
-
很奇怪。我使用的唯一参数(除了文件名)是
-std=c++17,文件只包含struct alignas(1,4) A {}; struct alignas(int, double) B {}; -
Godbold,它给出了与其他错误相同的错误。在我家的电脑上,没有消息。当然,它也不会生成可执行文件。一定是安装有问题?
标签: c++ c++11 visual-c++ g++ clang++