变量列表中的逗号是序列点吗?

时间:2011-06-20 15:55:32

标签: c++ variables comma sequence-points

在以下类型的代码中,每个变量构造之间是否有一个序列点,或者结果是否未定义?

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

我无法在标准中找到对序列点的具体引用。这是否意味着它是未定义的,或者只是我在搜索中失败了?表达式的完成是一个序列点,但上面的初始化也会计算?

2 个答案:

答案 0 :(得分:20)

我认为行为是明确的,因为 8 [dcl.decl] / 3

  

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

甚至在脚注中另外说明了

  

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

T D1, D2, ... Dn;
     

通常与

等价
T D1; T D2; ... T Dn;

答案 1 :(得分:8)

您怀疑每个初始化表达式后都有一个序列点,因为它们是完整的表达式(1.9 / 16,1.9 / 12)。