在以下类型的代码中,每个变量构造之间是否有一个序列点,或者结果是否未定义?
int a = 0;
int b = a++, c = a++;
我无法在标准中找到对序列点的具体引用。这是否意味着它是未定义的,或者只是我在搜索中失败了?表达式的完成是一个序列点,但上面的初始化也会计算?
答案 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)。