在以下类型的代码中,每个变量构造之间是否有一个序列点,或者结果是否未定义?
int a = 0;
int b = a++, c = a++;
我在标准中找不到对序列点的具体引用。这是否意味着它是未定义的,或者只是我的搜索失败了?一个表达式的完成是一个序列点,但上面的初始化也算数吗?
我相信行为是明确定义的,因为8[dcl.dll]/3
声明中的每个init声明符都被单独分析,就好像它本身在声明中一样。
甚至在脚注中被额外解释为
一个包含多个声明符的声明通常相当于相应的声明序列,每个声明都包含一个声明人。那是
T D1, D2, ... Dn;
通常相当于
T D1; T D2; ... T Dn;
正如您所怀疑的,每个初始值设定项表达式后面都有一个序列点,因为它们是完整的表达式(1.9/16,1.9/12)。