我在我的 C++ 代码中使用以下内容:
int a = 0, b = a;
我想知道这种行为是否可靠且定义良好(名称声明从左到右的顺序),并且我的代码不会与其他带有未申报的名字 error.
如果不可靠,我会打破这个说法:
int a = 0;
int b = a;
谢谢。
我相信答案是否定的。
它受核心活跃问题 1342 http://www.open-std.org/JTC1/SC22/WG21/docs/cwg_active.html#1342其中说:
目前尚不清楚现有规范中的哪些内容(如果有的话)要求按声明顺序执行单个声明中的多个 init 声明符的初始化。
我们有非规范性注释[dcl.decl]p3 http://eel.is/c++draft/dcl.decl#3其中说:
...[ 注意:具有多个声明符的声明通常是
相当于相应的声明序列,每个声明都有一个
单一声明者。那是
T D1, D2, ... Dn;
通常相当于
T D1; T D2; ... T Dn;
...
但它是非规范的,它根本不涵盖初始化情况,据我所知,没有规范的措辞说同样的事情。
尽管该标准确实涵盖了以下名称的范围[基本范围.pdecl]p1 http://eel.is/c++draft/basic.scope.pdecl#1其中说:
名称的声明点是在其完成之后立即
声明符及其初始化程序(如果有)之前,除非下面另有说明。
[ 例子:
unsigned char x = 12;
{ unsigned char x = x; }
这里第二个 x 用它自己的(不确定的)值初始化。
— 示例结束 ]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)