文章的楼主连左值都可以运算,还若无其事得当作可以编译,在那讲解,若无其事就算了,可以当做没有发现编译问题,但是那讲解也太误导人了吧?然后我跟帖的楼下还出现一个“石破天”,以教导式的口吻,在那讲解,不知道的人岂不是就信了吗?真真一群害人之马,当然我只是指其中几位,很多跟帖的朋友,我自认还是不如的。
就为了这个影响广泛的害人帖子(在csdn上弹框出来,影响能不小吗?),我也来探讨一下i++,我是菜鸟,我不会用教导式口吻来讲解。
首先说文章楼主提到的
<div bg_java"="" style="color: rgb(51, 51, 51); font-family: verdana, sans-serif; font-size: 13px; width: 685px; line-height: 25px;">
if((i++=j++)!=4){}
看到这句代码我真想喷,因为这让我对自己产生了不自信,还去编译了一下,果然是错误的,左边怎么能够进行运算呢?楼主真强大...为什么昨天没有写文章,没有情绪激动,因
为我知道C++风格也是这样赋值,不知道能不能编译过去,但是今天看到跟帖的朋友说,VC98过不去,DEV-C++也过不去,我才感到真有一种被耍的感觉。“左值能运算吗?What the hell!"这一句,只是骂我自己怀疑自己,没有对其他任何人。
假设,楼主是手误,咱们来一个正确的能编译的代码讨论一下:
temp=j;//先赋
j=j+1;//后加
i=temp;
j=j+1;//后加
i=temp;
再来一个i = ++j:这一句应该被拆分为:
/*这个是原式,尊重版权,但是误导人*/
inti=10;
i=i+++i++;//20--这里应该会是21,notebyjacob
i=++i+++i;//44--这里应该会是45,notebyjacob
inti=10;
i=i+++i++;//20--这里应该会是21,notebyjacob
i=++i+++i;//44--这里应该会是45,notebyjacob
首先咱们把这都拆开来理解:
/*第二个i=++i+++i;*/
i=i+1;
temp1=i;
i=i+1;
temp2=i;
i=temp1+temp2;
i=i+1;
temp1=i;
i=i+1;
temp2=i;
i=temp1+temp2;
这样的例子,应该算是比较复杂的吧?如果需要,还可以来一个更加复杂的,不过不再详细解释,大家可以拿来推敲一下:
intj=0,k=0,h=0;
k=k+++k+++k+++++k;//k==7
j=++j+j+++j+++j++;//j==7;
h=++h+++h;
k=k+++k+++k+++++k;//k==7
j=++j+j+++j+++j++;//j==7;
h=++h+++h;