逗號操作符(,)可以構成逗號表示式
逗號表示式用於將多個子表示式連線為乙個表示式
逗號表示式的值為最後乙個子表示式的值
逗號表示式的前n-1個子表達
先來看乙個例子
#include
#include
using
namespace std;
void
func
(int i)
intmain()
;int i =0;
int j =0;
while
( i <5)
func
(i),
i++;for
(i=0
; i<
3; i++)}
(i, j)=6
;
cout <<
"i = "
<< i << endl;
cout <<
"j = "
<< j << endl;
return0;
}先進行猜想,我們的while
(i<
5)會不會變成死迴圈呢?
(i,j)
=6根據上面的原則,逗號表達的值為最後乙個子表達的值,`所以j==
6,看結果
結果:```bash
sice@sice:
~$ .
/a.out
func()
: i =
0func()
: i =
1func()
: i =
2func()
: i =
3func()
: i =42
5800
0000
i =3
j =6
不是說while沒有帶大括號時作用範圍不是僅僅是跟的語句嗎?為什麼我們的i++起作用了呢,這是因為我們的func(i)後面跟的是逗號,所以後面的i++也在while的作用域內,這就是逗號操作符的作用,用於將多個子表示式連線為乙個表示式,看到我們的二維陣列,因為我們這裡用的是圓括號,所以逗號表示式的值為最後乙個子表示式的值,即表現出2,5,8,未初始化的為0,則得到上述的結果,下面來看過載逗號操作符
在c++中過載逗號操作符是合法的
使用全域性函式對逗號操作符進行過載
過載函式的引數必須有乙個是類型別
過載函式的返回值型別必須是引用
定義:class& operator,(const class& a,const class& b)
看接下的這個例子:
#include
#include
using
namespace std;
class
test
test
(int a)};
test&
operator,(
const test& t1,
const test&t2)
test func
(test &i)
intmain()
結果:
the vaule is 2
the vaule is 1
the tt value is 2
我們的過載逗號操作符函式並不是我們所說的那樣從左向右計算,因為我們的(func(t1),func(t2))可以看作是operator ,(func(t1),func(t2)),而函式的引數的計算次序是不定的,所以造成了這種現象,我們的實際的開發過程不要過載逗號操作符,我們把過載操作函式注釋掉,再次執行為以下結果,不要過載就正常啦
the vaule is 1
the vaule is 2
the tt value is 2
逗號操作符過載
逗號操作符語義 將多個子表示式連線為乙個表示式,整個表示式的值是最後乙個表示式的值。前 個表示式可以沒有返回值。從左到右計算每個子表示式的值。逗號操作的過載 使用全域性函式對逗號操作符進行過載。過載函式引數必須有乙個是類型別。過載函式返回值型別必須是引用。class operator const c...
逗號操作符的意義
1.class mynum 2.8.9.class someclass 10.23.24.mynum num 25.int a 26.int b,c 27.在這段 裡,逗號在5,13 16,18 20,27行都出現了。現在先讓我們來看看c 逗號操作符是啥意思 乙個包含逗號的表示式首先計算逗號左邊的表...
逗號操作符使用小技巧
if b 1,c 2,d 0 省略判斷條件相當於捨棄了前面兩個式子,而是只判斷了最後乙個 d 0 的真假,所以這種用法毫無意義。原 a get value count value a 在while迴圈前有兩條語句用於獲得在迴圈表示式中進行測試的值 while a 0 簡化版本1 逗號操作符 whil...