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

edA*_*a-y 21 c++ variables comma sequence-points

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

int a = 0;
int b = a++, c = a++;
Run Code Online (Sandbox Code Playgroud)

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

Cub*_*bbi 21

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

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

这甚至在脚注中另外解释为

具有多个声明符的声明通常等效于具有单个声明符的相应声明序列.那是

T D1, D2, ... Dn;
Run Code Online (Sandbox Code Playgroud)

通常是等价的

T D1; T D2; ... T Dn;
Run Code Online (Sandbox Code Playgroud)

  • +1:这个词通常意味着它们可能不等价,例如,在本例中:`struct S{}; SS, A;`(不等同于格式错误的“SS; SA;” (2认同)

Ala*_*kes 9

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