-6

在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过。

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

4

2 回答 2

3

检查http://en.cppreference.com/w/cpp/language/eval_order尤其是讨论“未定义行为”的部分。基本上这不是编译器中的错误。语言说你在做什么是未定义的。

于 2013-06-01T18:39:25.590 回答
0

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

++m -> value is 6, m is 6
m++ -> value is 6, m is 7
6*6 = 36
于 2013-06-01T18:43:18.173 回答