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

Is the comma in a variable list a sequence point?

本文关键字:列表 变量      更新时间:2023-10-16

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

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)。