成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C++逗號操作符應用方法詳解

開發(fā) 后端
C++逗號操作符的具體功能是:一個包含逗號的表達式首先計算逗號左邊的表達式,而結果則是逗號右邊的表達式的值。

逗號操作符在程序開發(fā)中是一個非常常用的操作符。那么在C++語言中有沒有都好操作符呢?如果有的話,又應當如何正確的使用C++逗號操作符呢?在這里我們將會給大家詳細介紹一下相關概念。

不少C++ newbie都會問到這問題,大家對+-*/自然是認識的了,對其他的%!&|之類的也不覺得陌生,但是逗號操作符?可能有一半的人會說不清楚它到底是干啥的。

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

讓我們先從一個類的示例代碼開始:

 

  1. class mynum  
  2. {  
  3. public:  
  4. mynum(double ndb,...)  
  5. {  
  6. //init with arguments  
  7. }  
  8. };  
  9. class someclass  
  10. {  
  11. someclass():  
  12. num(3,4)  
  13. ,a(0)  
  14. ,b(0)  
  15. ,c(15)  
  16. {  
  17. int i,j;   
  18. i=1,2; //int x=1,2;  
  19. for(;b<10;++b,--c)  
  20. {  
  21. ++a;  
  22. }  
  23. }  
  24. mynum num;  
  25. int a;  
  26. int b,c;  
  27. }; 

 

 

在這段代碼里,逗號在5,13-16,18-20,27行都出現(xiàn)了。#t#

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

一個包含逗號的表達式首先計算逗號左邊的表達式,然后計算逗號右邊的表達式;整個表達式的結果是逗號右邊表達式的值。

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

第5行是在mynum類的構造函數(shù)里出現(xiàn)的逗號,只是用來區(qū)分開***個double類型的參數(shù)和后面的可變參數(shù)。這是一個特例,如果在構造mynum對象的時候,本來是要傳入3.4作為***個參數(shù)的,結果不小心把小數(shù)點變成了逗號的話,3.4就變成了兩個參數(shù)3和4——比如在第13行的情況。類似這樣的情況編譯器不會報錯,程序也能運行,但是mynum類里的成員變量可能就因為構造函數(shù)傳入的變量值變化而導致程序運行結果完全不一致了。這兩個逗號都不是逗號操作符了。

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

第18行的int i,j;是大家都很常用的變量聲明的語句,逗號在這里,也只是起了一個間隔變量聲明的作用,也不是逗號運算符。

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

 

 

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

 

 

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

 

第27行就無須多說了。也就是一普通的變量聲明語句,這里的逗號也不是C++逗號操作符的。

 

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

比如逗號和括號就會引發(fā)一些潛在問題,如果在編碼的時候一疏忽就會產生一些難以追查的隱藏bug,只有遵守一些既定的編碼規(guī)范,養(yǎng)成良好嚴謹?shù)木幋a習慣,才有助于避免一些諸如此類的問題出現(xiàn)。看看下面的代碼:

 

  1. int myadd(int i,int j,int k)  
  2. {  
  3. return i+j+k;  
  4. }  
  5. int myadd(int i,int j)  
  6. {  
  7. return i+j;  
  8. }  
  9. int main()  
  10. {  
  11. for(int x=0;x<9;++x)  
  12. {  
  13. printf("%d",myadd((2,3),4));  
  14. }  

 

 

由于在第15行,錯誤的添加了括號(在實際編碼中這樣的情況太常見了),結果導致整個的輸出全錯了!因為(2,3)這個C++逗號操作符表達式的返回值是3,所以15行相當于是myadd(3,4)了!

責任編輯:曹凱 來源: 博客園
相關推薦

2009-08-19 17:33:35

C# 操作符

2010-01-28 11:16:28

C++操作符

2010-02-03 10:23:47

C++操作符重載

2010-01-27 11:00:17

C++操作符

2010-02-01 10:43:10

C++跨平臺應用

2010-01-19 13:32:20

C++操作符

2010-01-21 09:53:23

C++操作符

2010-02-05 15:51:06

C++ explici

2009-08-19 17:20:22

C# 操作符

2010-02-03 13:26:53

C++計時

2010-02-02 16:49:32

C++中文字符

2011-03-30 17:20:18

C++引用

2010-02-05 10:30:02

C++操作符重載

2009-08-19 17:38:17

C# 操作符分類

2010-02-02 17:08:22

2024-05-07 08:55:46

C#軟件開發(fā)代碼執(zhí)行時間

2010-02-02 14:36:08

C++ Cstring

2023-10-12 09:58:45

操作符C++

2010-02-06 10:50:10

C++統(tǒng)計對象個數(shù)

2010-02-02 13:57:31

C++解析#pragm
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲欧美日韩在线 | 先锋影音资源网站 | 中文字幕免费视频 | 久久精品91| 国精日本亚洲欧州国产中文久久 | 蜜桃视频在线观看免费视频网站www | wwww.8888久久爱站网 | 国产精品小视频在线观看 | 日韩成人 | 男女污污动态图 | 日韩中出 | 欧美日产国产成人免费图片 | 亚洲激情一区二区 | 亚洲va欧美va天堂v国产综合 | 日日操夜夜操天天操 | 国产精品一区二区三 | 亚洲人成在线播放 | 国家aaa的一级看片 h片在线看 | 夜夜摸夜夜操 | 九九热免费观看 | 国产精品1区2区3区 国产在线观看一区 | 国产高清一区 | 成人久久久 | 国产精品欧美一区二区三区 | 性生生活大片免费看视频 | 日韩欧美在线免费观看 | 97精品国产| h在线 | 97超碰在线免费 | 国产福利91精品一区二区三区 | 国产精品伦一区二区三级视频 | 久久国产精品精品 | 成人国产在线视频 | 亚洲综合在线视频 | 国产午夜精品一区二区三区四区 | 色爱综合网 | 国产精品美女 | 免费国产黄网站在线观看视频 | 国产一区不卡在线观看 | 中文字幕精品一区二区三区精品 | 一区二区三区四区不卡 |