2013-06-01 78 views
-6

C++中出现了令人惊讶和令人震惊的逻辑问题。编译器问题或代码块中的一些错误c

请参阅以下两段代码。

码1

int m = 5, n = 0; 
n = m++ * ++m; 
//This print m = 7 and n = 36 
//Which is logically wrong 

码2

int m = 5; 
int n = m++ * ++m; 
//This print m = 7 and n = 35 
//Which is logically right 

,因为我们认为在逻辑上的代码块2给出了正确的答案,但令人惊叹的还是魔法的事情是什么代码块1错了?

由于部分代码相同,我们刚才宣称int n

可能会有些编译!!!!!!

+2

'm ++ * ++ m' is * undefined behavior *。你的输出没有什么“逻辑错误”;这是你的代码坏了。 – Cairnarvon

+0

我想一个有效的问题是:为什么这个编译器实现以这种方式工作。 – Elazar

+0

@RaymondChen,你没有回答我的问题。实施可能会产生一个井字游戏,但它没有。 – Elazar

回答

0

除了“未定义的行为”部分,这很重要,这里没有什么不合逻辑的。假设评估是从右到左:

++m -> value is 6, m is 6 
m++ -> value is 6, m is 7 
6*6 = 36