int a = a ;
Run Code Online (Sandbox Code Playgroud)
根据赋值运算符规则,它应该从右到左读取行.看到'a'未声明的编译器后应该给出编译错误.
但是it is giving garbage value.请澄清一下.
Jer*_*fin 10
§3.3.2/ 1:
声明的声明就在其完整的声明者(第8条)之后和初始化者(如果有的话)之前,除非如下所述.[例如:
int x = 12;
{ int x = x; }
Run Code Online (Sandbox Code Playgroud)
这里第二个x用它自己的(不确定的)值初始化. - 末端的例子]
实际上,编译器可能会给你一个提示。我的说:“警告 C4700:局部变量'a'在未初始化的情况下使用”。
但这本身并不是一个错误,声明只是为内存的某些位提供了一个变量名称,而没有触及它,这是有效且快速的。这里的分配并不是真正的分配,只是将位从右向左移动。又没有检查。非常高效,但非常不安全。
每一次操作都是合法的,但整件事毫无意义。因此编译器会尽其所能 - 它编译代码,但也会发出警告。
| 归档时间: |
|
| 查看次数: |
270 次 |
| 最近记录: |