溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C++中如何使用逗號(hào)操作符

發(fā)布時(shí)間:2021-07-19 16:17:04 來(lái)源:億速云 閱讀:375 作者:Leah 欄目:編程語(yǔ)言

C++中如何使用逗號(hào)操作符,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

其實(shí),我們是經(jīng)常會(huì)用到逗號(hào)操作符的,但是并不是所有代碼里出現(xiàn)的逗號(hào)都是逗號(hào)操作符。

讓我們先從一個(gè)類(lèi)的示例代碼開(kāi)始:

class mynum  {  public:  mynum(double ndb,...)  {  //init with arguments  }  };  class someclass  {  someclass():  num(3,4)  ,a(0)  ,b(0)  ,c(15)  {  int i,j;   i=1,2; //int x=1,2;  for(;b<10;++b,--c)  {  ++a;  }  }  mynum num;  int a;  int b,c;  };

現(xiàn)在先讓我們來(lái)看看C++逗號(hào)操作符是啥意思:

一個(gè)包含逗號(hào)的表達(dá)式首先計(jì)算逗號(hào)左邊的表達(dá)式,然后計(jì)算逗號(hào)右邊的表達(dá)式;整個(gè)表達(dá)式的結(jié)果是逗號(hào)右邊表達(dá)式的值。

然后我們看看上面的代碼:

第5行是在mynum類(lèi)的構(gòu)造函數(shù)里出現(xiàn)的逗號(hào),只是用來(lái)區(qū)分開(kāi)***個(gè)double類(lèi)型的參數(shù)和后面的可變參數(shù)。這是一個(gè)特例,如果在構(gòu)造mynum對(duì)象的時(shí)候,本來(lái)是要傳入3.4作為***個(gè)參數(shù)的,結(jié)果不小心把小數(shù)點(diǎn)變成了逗號(hào)的話,3.4就變成了兩個(gè)參數(shù)3和4&mdash;&mdash;比如在第13行的情況。類(lèi)似這樣的情況編譯器不會(huì)報(bào)錯(cuò),程序也能運(yùn)行,但是mynum類(lèi)里的成員變量可能就因?yàn)闃?gòu)造函數(shù)傳入的變量值變化而導(dǎo)致程序運(yùn)行結(jié)果完全不一致了。這兩個(gè)逗號(hào)都不是逗號(hào)操作符了。

第14,15,16行的逗號(hào),也不是逗號(hào)操作符。這三個(gè)逗號(hào)只是用來(lái)間隔構(gòu)造函數(shù)的成員變量初始化列表。

第18行的int i,j;是大家都很常用的變量聲明的語(yǔ)句,逗號(hào)在這里,也只是起了一個(gè)間隔變量聲明的作用,也不是逗號(hào)運(yùn)算符。

第19行的逗號(hào),如果不認(rèn)識(shí)C++逗號(hào)操作符的話,一定會(huì)認(rèn)為這肯定是寫(xiě)錯(cuò)了!其實(shí)這正是逗號(hào)操作符了。讓我們看看,經(jīng)過(guò)i=1,2;這個(gè)語(yǔ)句后,i 的值應(yīng)該是多少呢?按照之前逗號(hào)操作符的定義,我們好像可以很輕松的得出i=2。然而,這個(gè)答案是錯(cuò)的!你在得出錯(cuò)誤答案的時(shí)候,忽略了一個(gè)重要的因素&mdash;&mdash;運(yùn)算符優(yōu)先級(jí)!由于=號(hào)的優(yōu)先級(jí)更高,所以i=1,2;這個(gè)語(yǔ)句相當(dāng)于(i=1),2; ,如果要得到期望的2,我們應(yīng)該這樣來(lái)寫(xiě)i=(1,2);。下面的代碼可以驗(yàn)證這個(gè)說(shuō)法的(注意第3行是無(wú)意義代碼,但是可不是錯(cuò)誤代碼哦!)

int i,j;  i=1,2;  3,4;  j=(1,2);  printf("%d\n%d\n",i,j);

繼續(xù)看***份代碼里的第20行,這是一個(gè)for循環(huán)代碼。這里的逗號(hào),也是逗號(hào)操作符哦。其實(shí)for循環(huán)也是逗號(hào)操作符經(jīng)常出現(xiàn)的地方哦。for循環(huán)里只能寫(xiě)一個(gè)表達(dá)式,而逗號(hào)表達(dá)式這個(gè)時(shí)候就可以讓你完成兩個(gè)甚至多個(gè)表達(dá)式的計(jì)算。比如“for(;b<10;++b,--c)”,++b和--c就會(huì)在每次循環(huán)中都被執(zhí)行到。

第27行就無(wú)須多說(shuō)了。也就是一普通的變量聲明語(yǔ)句,這里的逗號(hào)也不是C++逗號(hào)操作符的。

總的來(lái)說(shuō),逗號(hào)操作符并不是一個(gè)非常常用的操作符,它只在某些特定的上下文環(huán)境里會(huì)有很好的效果,同時(shí),在編碼中還要非常小心錯(cuò)誤的輸入的逗號(hào)引發(fā)錯(cuò)誤的問(wèn)題。

比如逗號(hào)和括號(hào)就會(huì)引發(fā)一些潛在問(wèn)題,如果在編碼的時(shí)候一疏忽就會(huì)產(chǎn)生一些難以追查的隱藏bug,只有遵守一些既定的編碼規(guī)范,養(yǎng)成良好嚴(yán)謹(jǐn)?shù)木幋a習(xí)慣,才有助于避免一些諸如此類(lèi)的問(wèn)題出現(xiàn)??纯聪旅娴拇a:

int myadd(int i,int j,int k)  {  return i+j+k;  }  int myadd(int i,int j)  {  return i+j;  }  int main()  {  for(int x=0;x<9;++x)  {  printf("%d",myadd((2,3),4));  }  }

由于在第15行,錯(cuò)誤的添加了括號(hào)(在實(shí)際編碼中這樣的情況太常見(jiàn)了),結(jié)果導(dǎo)致整個(gè)的輸出全錯(cuò)了!因?yàn)?2,3)這個(gè)C++逗號(hào)操作符表達(dá)式的返回值是3,所以15行相當(dāng)于是myadd(3,4)了!

看完上述內(nèi)容,你們掌握C++中如何使用逗號(hào)操作符的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI