在 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
。
可能有些编译!!!!!!
答案 0 :(得分:3)
检查http://en.cppreference.com/w/cpp/language/eval_order,尤其是讨论“未定义行为”的部分。基本上它不是编译器中的错误。语言说你正在做的事情是未定义的。
答案 1 :(得分:0)
除了“未定义的行为”部分,这很重要,这里没有什么不合逻辑的。假设评估是从右到左:
++m -> value is 6, m is 6
m++ -> value is 6, m is 7
6*6 = 36