为什么不给出编译错误?

rfo*_*itz 6 c c++

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用它自己的(不确定的)值初始化. - 末端的例子]


aka*_*nuk 2

实际上,编译器可能会给你一个提示。我的说:“警告 C4700:局部变量'a'在未初始化的情况下使用”。

但这本身并不是一个错误,声明只是为内存的某些位提供了一个变量名称,而没有触及它,这是有效且快速的。这里的分配并不是真正的分配,只是将位从右向左移动。又没有检查。非常高效,但非常不安全。

每一次操作都是合法的,但整件事毫无意义。因此编译器会尽其所能 - 它编译代码,但也会发出警告。