声明中的逗号运算符

时间:2017-12-05 10:12:45

标签: c++

我正在编写一个C ++解析器(实际上是它的一小部分),并且找不到为什么在变量初始化中不允许使用逗号运算符的解释。

int a = 1, 2; // throws a "Expected ';' at the end of declaration" compiler error
a = 1, 2; // assigns the result of the comma binary operator to the a (2)
int a = (1, 2); // does the same as above, because paren expression is allowed as an initializer

C ++规范说你可以在变量声明中使用表达式作为初始化器。为什么不允许使用逗号二进制表达式,但允许所有其他表达式(具有更高优先级)? cppreference.com(http://en.cppreference.com/w/cpp/language/initialization)表示任何表达式都可以用作初始值。

C ++规范的第8.5节说初始化程序只能包含赋值表达式。这是否是规定该赋值是初始化中允许的最低优先级表达式的地方?

1 个答案:

答案 0 :(得分:4)

语法语法将初始化器中的逗号解释为逗号分隔的声明符子句,即形式:

int i = 2, j = 3;

为了避免这种歧义,你需要在括号中包含逗号表达式。

来自 [dcl.decl]

[...]
init-declarator-list:
    init-declarator
    init-declarator-list , init-declarator
[...]