回 帖 发 新 帖 刷新版面

主题:C++中++的探讨(转贴)

一。对++N的研究

{
int nTest = 1;
int nTwo = (++nTest)+(++nTest)+.....;
}
对于这种计算 首先++nTest计算的nTest = 2,然后++nTest计算的nTest = 3,在第二次计算时,把第一次计算结果的冲掉,然后相加的4,后面的计算和我们一般的理解一样。

二。对N++的研究

{
int nTest = 1;
int nTwo = (nTest++)+(nTest++)+.....;
}
对于这种计算它的二目加法的优先级高。在计算中一直用nTest = 1相加,相加完在计算++
。   
三。对N++与++N的混合的研究
{
int nTest = 1;
int nTwo = (nTest++)+(++nTest)+.....;
}
可以看当前两个括号中有++N则计算++N然后计算别的。

四。对++N++的计算
只允许(++N)++的计算可以看出++N是返回值的。而N++不返回值故不能用++(N++)

综上。我们得出N++的优先级的最低,而对于++N优先级颇高,对于前面俩个有++N与N++
的计算中先计算++N,然后计算别的。

回复列表 (共9个回复)

沙发

大家讨论一下这个问题啊!我写了个小程序验证楼主的说法
如下:
#include<iostream.h>
main()
{
    int i=0;
    int j,k,m;
    j=(++i)+(++i)+(++i);          //一
    cout<<i<<endl;
    i=0;
    k=(i++)+(i++)+(i++);          //二
    cout<<i<<endl;
    i=0;
    m=(i++)+(++i)+(i++);         //三
    cout<<i<<endl;
    cout<<j<<"  "<<k<<"  "<<m<<endl;
    return 0;
}
结果是:
3
3
3
7  0  3
第一个J我就不懂啊!
按楼主说的“在第二次计算时,把第一次计算结果的冲掉,然后相加”那样的话一里的第一个++i之后i=1,然后是第二个++i,i=2然后把第一次的结果i=1冲掉i=0,然后相加后得2,最后第3个++i,i=3再相加后应该是5啊,怎么是7啊?  谁看出是怎么回事了啊 !
第二个K好看些,3个i++,都安i=0算所以k=0+0+0;最后i=3;
第三个M因为前2项中有++i所以先算++i,i=1之后同第二的算法了i++,就是m=1+1+1.
请问大家能不能指点一下我想的对不对啊?还有第一个是怎么回事啊?谢谢了

板凳

怎么没有人回啊![em14][em15]

3 楼

我也很困惑阿!!

int i=0;
cout<<(++i)+(++i);
//为什么结果是 4 ?????

4 楼

我也很困惑阿!!

int i=0;
cout<<(++i)+(++i);
//为什么结果是 4 ?????

5 楼

期盼能人解决ING……

6 楼

晕...我没学过..但我都知道这个当然等于4

7 楼

++i相加等于2 位移一位不就是4吗?

8 楼

为什么++i相当于2啊?

9 楼

这是因为计算机在计算的时候是先把所有的++i算完后,再计算其他的运算.即两个i++然后就是i=2,然后再相加不就是4嘛?[em6]

我来回复

您尚未登录,请登录后再回复。点此登录或注册