【发布时间】:2013-06-01 18:37:05
【问题描述】:
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。
可能有些编译!!!!!!
【问题讨论】:
-
m++ * ++m是未定义的行为。您的输出没有任何“逻辑错误”;是你的代码坏了。 -
我想一个有效的问题是:为什么这个编译器实现会这样工作。
-
@RaymondChen,你没有回答我的问题。该实现本可以催生一款井字游戏,但它没有。
-
不要认为这个问题值得投反对票 - 可能标记/关闭为重复的 wrt 序列点和未定义的行为。对于想要弄清楚的新手(和新成员)来说,这些东西可能会令人惊讶。