aligna中的逗号运算符

问题描述 投票:0回答:1

此代码在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允许程序员摆脱他们不应该做的事情。

c++ expression language-lawyer
1个回答
1
投票
需要

alignment-specifier来包含type-idconstant-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)是语法错误,应由合格的编译器诊断。

© www.soinside.com 2019 - 2024. All rights reserved.