注册 登录
编程论坛 C++教室

VC++ 6.0中为什么结果是14?????

陈志文 发布于 2015-05-12 15:24, 1148 次点击
#include <iostream>
int main()
{
    using namespace std;
    int x=0;
    int y=4+(++x)+6+(++x);
    cout<<y<<endl;
    cout<<x<<endl;
    return 0;
}
10 回复
#2
rjsp2015-05-12 15:39
不要研究『未定义行为』,这是无意义的。
#3
yangfrancis2015-05-12 16:45
真的很奇怪,DEVC++运行出来就是13. 这种属于编译器自身的问题,谁也说不清.但你把它拆成几条语句就是13了
using namespace std;
    int x=0;   
    ++x;
    int y=4+(x);
    ++x;
    y=y+6+(x);
    cout<<y<<endl;
    cout<<x<<endl;
    return 0;
#4
hzj1996032015-05-12 18:18
回复 楼主 陈志文
DEV上运行的是13啊,
#5
ding137431882015-05-12 20:01
回复 3楼 yangfrancis
也有可能和编译器自身有关系。拆开以后是先对x+一次。然后使用。然后再使x+。再使用。不拆开的话。是x先自加2次才使用的。然后相当与4+2+6+2.不知道对不对。个人见解
#6
陈志文2015-05-12 21:21
大家的回复很有帮助,谢谢,没有分了,抱歉!
#7
旗开得胜LK2015-05-24 21:47
因为是先增加x的值后计算表达式,计算表达式的时候x的值为2,所以4+2+6+2=14
#8
文心边城2015-05-24 23:38
我来做权威解释:

    1,结果与编译环境有关,VC++下是14,2; gcc 下是13,2;  总结:x的值是一样,不同的是y。

    2,我们将y=4+(++x)+6+(++x);表示成y = f1()+f2()+f3()+f4();
      
       在VC++下, f2()=(++c) 与 f4() = (++c) 是同时运算的,0作为表达式中所有的x的值,因此经自增两次就得到2,f2()=f4()=2;

       y=4+2+6+2=14,x=2

[ 本帖最后由 文心边城 于 2015-5-26 06:09 编辑 ]
#9
旗开得胜LK2015-05-25 19:42
回复 8楼 文心边城
大神,为什么在gcc 下Y的值是13
#10
wmf20142015-05-25 21:52
个人感觉可能和编译器采用的优化方式有关:如果本来就认为++优先级大于+,优化运算时就不需要考虑括号的话,则顺序往后运算,运算结果为13,如果编译器认为括号优先级最高,必须先做括号,那么两个括号做完后x=2,再做其他运算则结果为14.
#11
文心边城2015-05-26 06:11
回复 9楼 旗开得胜LK
因为gcc编译器是依次计算这两个(++i)的
1