为什么不给出编译错误?

时间:2013-07-12 05:21:33

标签: c++ c

int a = a ;  

根据赋值运算符的规则,它应该从右到左读取行。看到'a'未声明的编译器后应该给出编译错误     但是it is giving garbage value。请澄清它。

2 个答案:

答案 0 :(得分:9)

§3.3.2/ 1:

  

声明的名称是在完整的声明者(第8条)之后和初始化者(如果有的话)之前,除非如下所述。 [例如:

int x = 12;
{ int x = x; }
  

这里第二个x用它自己的(不确定的)值初始化。 - 例子]

答案 1 :(得分:2)

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

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

每一项行动都是合法的,但整件事情毫无意义。因此编译器可以做到最好 - 它编译代码,但也会发出警告。