| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1144 人关注过本帖
标题:VC++ 6.0中为什么结果是14?????
只看楼主 加入收藏
陈志文
Rank: 2
等 级:论坛游民
帖 子:17
专家分:10
注 册:2014-10-13
结帖率:50%
收藏
 问题点数:0 回复次数:10 
VC++ 6.0中为什么结果是14?????
#include <iostream>
int main()
{
    using namespace std;
    int x=0;
    int y=4+(++x)+6+(++x);
    cout<<y<<endl;
    cout<<x<<endl;
    return 0;
}
搜索更多相关主题的帖子: include 
2015-05-12 15:24
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:0 
不要研究『未定义行为』,这是无意义的。
2015-05-12 15:39
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
真的很奇怪,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;
2015-05-12 16:45
hzj199603
Rank: 2
来 自:南京
等 级:论坛游民
帖 子:18
专家分:32
注 册:2015-3-29
收藏
得分:0 
回复 楼主 陈志文
DEV上运行的是13啊,
2015-05-12 18:18
ding13743188
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-5-12
收藏
得分:0 
回复 3楼 yangfrancis
也有可能和编译器自身有关系。拆开以后是先对x+一次。然后使用。然后再使x+。再使用。不拆开的话。是x先自加2次才使用的。然后相当与4+2+6+2.不知道对不对。个人见解
2015-05-12 20:01
陈志文
Rank: 2
等 级:论坛游民
帖 子:17
专家分:10
注 册:2014-10-13
收藏
得分:0 
大家的回复很有帮助,谢谢,没有分了,抱歉!
2015-05-12 21:21
旗开得胜LK
Rank: 1
等 级:新手上路
帖 子:13
专家分:2
注 册:2015-5-24
收藏
得分:0 
因为是先增加x的值后计算表达式,计算表达式的时候x的值为2,所以4+2+6+2=14
2015-05-24 21:47
文心边城
Rank: 2
等 级:论坛游民
威 望:2
帖 子:98
专家分:67
注 册:2005-12-13
收藏
得分:0 
我来做权威解释:

    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 编辑 ]

会写c c++ java php JS AS vb python
2015-05-24 23:38
旗开得胜LK
Rank: 1
等 级:新手上路
帖 子:13
专家分:2
注 册:2015-5-24
收藏
得分:0 
回复 8楼 文心边城
大神,为什么在gcc 下Y的值是13
2015-05-25 19:42
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
个人感觉可能和编译器采用的优化方式有关:如果本来就认为++优先级大于+,优化运算时就不需要考虑括号的话,则顺序往后运算,运算结果为13,如果编译器认为括号优先级最高,必须先做括号,那么两个括号做完后x=2,再做其他运算则结果为14.

能编个毛线衣吗?
2015-05-25 21:52
快速回复:VC++ 6.0中为什么结果是14?????
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.049897 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved