C++中的自增小问题

来源:百度知道 编辑:UC知道 时间:2024/05/14 08:37:05
int x=-1;
int y = (++x) + (++x) + (++x)
省略了其他,问下y=多少?,要附有说明分析过程,谢谢!
答案是4,但是不太明白唉。。。。

别再纠结这个问题了!
我告诉你正确的答案是:不确定。请避免在程序中使用这样的写法。
凡是给出确定值的都是错误的。
因为这种写法在C99和C++2003里面是“未说明”(unspecified)的,未说明就是没有进行规定,因此不同的编译器会产生不同的结果。
这里面涉及到“序列点”的问题。凡是在一个序列点之前多次修改一个变量都会造成结果的不确定。
我就不细说了,有兴趣可以自己看一下!

补充:标准就是标准,不是某些人觉得是什么样就是什么样的,这些在C99和C++2003标准里面写的都是很清楚的。
建议楼主非要弄明白序列点的话可以看这篇文章:
http://www.blogjava.net/zellux/archive/2008/05/16/200811.html
只记住结论的话也是没问题的!

另外,引用一本书里写的:
以下内容引自《C 语言常见问题集》 原著:Steve Summit 翻译:朱群英, 孙 云
4.3 对于代码 int i = 3; i = i++; 不同编译器给出不同的结果, 有的为 3, 有的为 4, 哪个是正确的?

没有正确答案;这个表达式无定义。参见问题 3.1, 3.7 和 11.32。 同时注意, i++ 和 ++i 都不同于 i+1。如果你要使 i 自增 1, 使用 i=i+1, i+=1, i++ 或 ++i, 而不是任何组合, 参见问题 3.10。

12.35 有人说 i = i++ 的行为是未定义的, 但是我刚在一个兼容 ANSI 的编译器上测试, 得到了我希望的结果。

面对未定义行为的时候, 包括范围内的实现定义行为和未确定行为, 编译器可以做任何实现, 其中也包括你所有期望的结果。但是依靠这个实现却不明智。参加问题 7.4, 11.31, 11.32 和 11.34。