6
int a = a ;  

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

4

2 回答 2

10

§3.3.2/1:

名称的声明点紧跟在它的完整声明符(第 8 条)之后和它的初始化器(如果有的话)之前,除非下面提到。[ 例子:

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

这里第二个 x 用它自己的(不确定的)值初始化。—结束示例]

于 2013-07-12T05:26:24.700 回答
2

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

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

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

于 2013-07-12T05:42:14.180 回答