C++声明顺序(在多变量声明行中)

poo*_*a13 7 c++ variables compilation declaration language-lawyer

我在我的C++代码中使用以下内容:

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

我想知道这种行为是否可靠且定义良好(从名称声明的顺序到左右),并且我的代码不会与其他具有未声明的名称错误的编译器断开.

如果不可靠,我会打破声明:

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

谢谢.

Sha*_*our 5

我相信答案是否定的。

它受核心活动问题 1342 的约束,其中说:

目前尚不清楚现有规范中的哪些内容(如果有的话)要求按声明顺序执行单个声明中多个 init-declarator 的初始化。

我们在[dcl.decl]p3 中有非规范性说明,其中说:

...[?注:带有多个声明符的声明通常等价于相应的声明序列,每个声明序列都带有一个声明符。那是

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

通常相当于

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

...

但它是非规范的,它根本不涵盖初始化情况,据我所知,没有规范的措辞说同样的事情。

尽管该标准确实涵盖了[basic.scope.pdecl]p1 中的名称范围,其中说:

名称的声明点紧跟在其完整的声明符之后和其初始值设定项(如果有)之前,除非下文有说明。[?例子:

unsigned char x = 12;
{ unsigned char x = x; }
Run Code Online (Sandbox Code Playgroud)

这里第二个 x 用它自己的(不确定的)值初始化。—?结束示例?]