此代码在Visual Studio 2019上编译并运行正常(输出5)
#include <iostream>
int main(void) {
alignas(2,3,9,8) int x=5;
std::cout << x;
return 0;
}
in C逗号表达式是alignas中的explicitly disallowed。这在这里编译很好。我更改了顺序,并在末尾(which is disallowed in alignas)处放置了9或3,但该程序无法编译,表明括号中的表达式确实被解析为逗号运算符。这里是否有不同的含义,或者这仅仅是VS允许程序员摆脱他们不应该做的事情。
alignment-specifier来包含type-id或constant-expression([dcl.attr]):
alignment-specifier: alignas(type-id ... opt) alignas(constant-expression ... opt)
并且constant-expression必须是conditional-expression([expr.const]):
constant-expression: 条件表达式
2,3,9,8
既不是type-id也不是constant-expression(因为逗号的优先级低于条件运算符?:
)。
因此,alignas(2,3,9,8)
是语法错误,应由合格的编译器诊断。