int a = a ;
根据赋值运算符的规则,它应该从右到左读取行。看到'a'未声明的编译器后应该给出编译错误
但是it is giving garbage value
。请澄清它。
答案 0 :(得分:9)
§3.3.2/ 1:
声明的名称是在完整的声明者(第8条)之后和初始化者(如果有的话)之前,除非如下所述。 [例如:
int x = 12;
{ int x = x; }
这里第二个x用它自己的(不确定的)值初始化。 - 例子]
答案 1 :(得分:2)
实际上,编译器可能会给你一个提示。我说:“警告C4700:局部变量'a'未经初始化使用”。
但这本身并不是一个错误,声明只是为某些内存位提供一个变量名而不触及它,这是有效且快速的。而这里的分配并不是真正的分配,只是从右向左移动位。没有检查。非常高效,非常不安全。
每一项行动都是合法的,但整件事情毫无意义。因此编译器可以做到最好 - 它编译代码,但也会发出警告。