初始化变量列表中的赋值顺序是否未定义

Is the order of assignment in a list of initialized variables undefined?

本文关键字:顺序 是否 未定义 赋值 变量 列表 初始化      更新时间:2023-10-16

可能重复:
变量列表中的逗号是序列点吗?

如果我有以下代码,逗号是作为正常的序列点,还是行为未定义?

int i = 1, j = i;

我实际上并不打算使用这个(我们的内部标准甚至禁止int i, j),但我很好奇,在谷歌上搜索它变得异常棘手

它定义明确:

8.声明人:[dcl.dell]

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

注意:

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

T D1, D2, ... Dn;

通常相当于

T D1; T D2; ... T Dn;

其中T是decl说明符seq,并且每个Di是init声明符。

完整性(因为注释上写着通常):

当一个声明符引入名称时发生异常隐藏dcl说明符使用的类型名,以便dcl说明符用于后续声明中,它们没有含义相同,如struct S { ... }; S S, T;//声明两个结构体S的实例which is not equivalent to结构体S{…};SSS T;//错误`