扫码关注官方订阅号
#include using namespace std; int main(){ int i=0; cout< 对以上代码的输出如何解释?不太明白(编译环境为VS2010)
对以上代码的输出如何解释?不太明白(编译环境为VS2010)
认证高级PHP讲师
不要再纠结这种和编译器处理非常相关的问题了,现实世界里基本不会遇到这样的场景。 好吧 既然被踩了就多说几句,这种傻逼情景应该只会在天朝的考试和国内作者出的垃圾书上出现。
我记得曾经有过这样一个问题,C语言中:
#include <stdio.h> int main() { int a, b; a = 2; b = (++a) * (++a) * (++a); printf("%d\n", b); return 0; }
gcc输出结果是80,但是TC的结果是60。据我们几个人推测原因是,gcc编译器是这样处理的:
a = ++a; //a == 3 a = ++a; //a == 4 b = a * a //b == 4 * 4==16 a = ++a; //a == 5 b = b * a; //b == 16 * 5 == 80
而TC编译器是这样处理的:
a = ++a; //a == 3 b = 3 * (++a); a = ++a; //a == 4 b = 3 * 4; a = ++a; //a == 5 b = b * a; //b == 12 * 5 == 60
个人理解呢,C语言也好C++也好只是一种标准,每个编译器在不违反标准的前提下有自己实现的办法,所以在写代码的时候注意不要写这种模棱两可的东西,不然移植性太差,以及容易出各种问题。事实上也没必要深究,除非是研究需要之类的。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
不要再纠结这种和编译器处理非常相关的问题了,现实世界里基本不会遇到这样的场景。
好吧 既然被踩了就多说几句,这种傻逼情景应该只会在天朝的考试和国内作者出的垃圾书上出现。
我记得曾经有过这样一个问题,C语言中:
#include <stdio.h> int main() { int a, b; a = 2; b = (++a) * (++a) * (++a); printf("%d\n", b); return 0; }gcc输出结果是80,但是TC的结果是60。据我们几个人推测原因是,gcc编译器是这样处理的:
a = ++a; //a == 3 a = ++a; //a == 4 b = a * a //b == 4 * 4==16 a = ++a; //a == 5 b = b * a; //b == 16 * 5 == 80而TC编译器是这样处理的:
a = ++a; //a == 3 b = 3 * (++a); a = ++a; //a == 4 b = 3 * 4; a = ++a; //a == 5 b = b * a; //b == 12 * 5 == 60个人理解呢,C语言也好C++也好只是一种标准,每个编译器在不违反标准的前提下有自己实现的办法,所以在写代码的时候注意不要写这种模棱两可的东西,不然移植性太差,以及容易出各种问题。事实上也没必要深究,除非是研究需要之类的。