逗号分隔变量定义中的序列 - 先前关系

时间:2015-04-21 01:07:55

标签: c++ operator-precedence

让我们从以下示例代码开始:

int a = 0, b = a++, c = a;

a++之前a排序c = aa++a似乎有资格作为完整表达,根据cppreference(规则1),答案应该是正面的。但我不确定。

1 个答案:

答案 0 :(得分:2)

是。正如Brian所指出的,这不是逗号运算符,而是 init-declarator-list 。从[dcl.decl]我们得到:

  

声明中的每个 init-declarator 都会被单独分析,就好像它本身就在声明中一样。

用脚注说明:

  

具有多个声明符的声明通常等效于相应的声明序列,每个声明都有一个声明   声明符。那是

T D1, D2, ... Dn;
     

通常相当于

T D1; T D2; ... T Dn;
     

其中T decl-specifier-seq ,每个Di init-declarator

有两个例外,一个用于隐藏类型的名称,另一个用于auto,两者都不适用。所以最终,你拥有的代码完全等同于:

int a = 0;
int b = a++;
int c = a;

您首先应该首先编写,因为它不会搜索标准以确保您正在做有效的事情!