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

时间:2012-10-04 14:48:48

标签: c++ operator-precedence

  

可能重复:
  Is the comma in a variable list a sequence point?

如果我有以下代码,逗号是否为正常序列点,或者行为未定义?

int i = 1, j = i;

我实际上并不打算使用这个(我们的内部标准甚至禁止int i, j),但我很好奇,谷歌也很奇怪。

1 个答案:

答案 0 :(得分:13)

明确界定:

8。声明者:[dcl.decl]

  

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

并注意:

  

90)有几个声明者的声明通常相当于   相应的声明序列,每个声明都有一个   声明符。那是

     

T D1, D2, ... Dn;

     

通常与

等价      

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

     

其中T是decl-specifier-seq,每个Di是a   INIT说明符。

对于完整性(因为注释说通常是):

  

当其中一个声明符引入名称时会发生异常   隐藏了dcl-specifiers使用的类型名称,以便在相同时使用   dcl-specifiers用于后续声明,它们没有   相同的含义,如struct S { ... }; S S, T; //声明两个   struct S which is not equivalent to struct S {...}的实例;小号   S; S T; //错误