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)
谢谢.
我相信答案是否定的。
它受核心活动问题 1342 的约束,其中说:
目前尚不清楚现有规范中的哪些内容(如果有的话)要求按声明顺序执行单个声明中多个 init-declarator 的初始化。
我们在[dcl.decl]p3 中有非规范性说明,其中说:
...[?注:带有多个声明符的声明通常等价于相应的声明序列,每个声明序列都带有一个声明符。那是
Run Code Online (Sandbox Code Playgroud)T D1, D2, ... Dn;通常相当于
Run Code Online (Sandbox Code Playgroud)T D1; T D2; ... T Dn;...
但它是非规范的,它根本不涵盖初始化情况,据我所知,没有规范的措辞说同样的事情。
尽管该标准确实涵盖了[basic.scope.pdecl]p1 中的名称范围,其中说:
名称的声明点紧跟在其完整的声明符之后和其初始值设定项(如果有)之前,除非下文有说明。[?例子:
Run Code Online (Sandbox Code Playgroud)unsigned char x = 12; { unsigned char x = x; }这里第二个 x 用它自己的(不确定的)值初始化。—?结束示例?]
| 归档时间: |
|
| 查看次数: |
250 次 |
| 最近记录: |