逗號操作符

2021-10-03 16:34:30 字數 1979 閱讀 6712

逗號操作符(,)可以構成逗號表示式

逗號表示式用於將多個子表示式連線為乙個表示式

逗號表示式的值為最後乙個子表示式的值

逗號表示式的前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...