C 中逗號操作符過載的分析

2022-08-18 10:24:13 字數 2548 閱讀 8387

1,關注逗號操作符過載後帶來的變化;

2,逗號操作符:

1,逗號操作符(,)可以構成都好表示式:exp1, exp2, exp3, ..., expn

1,逗號表示式用於將多個表示式連線為乙個表示式;

1,就是用來起連線不同語句作用的;

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

1,最後乙個必須有值;

3,逗號表示式中的前 n - 1 個子表示式可以沒有返回值;

4,逗號表示式按照從左向右的順序計算每個子表示式的值;

1,不能違反這個原生語義;

3,逗號表示式的示例例項分析:

1,main.cpp 檔案:

1 #include 2 #include 34

using

namespace

std;56

void func(inti)7

1011

intmain()12;

18/*

19// 更改如下方可

20int a[3][3] =,

22 ,

23

24};

25 */

2627

int i = 0;28

int j = 0;29

30while( i < 5

)

31 func(i), //

這裡是乙個逗號表示式;

3233 i++;

3435

/*上條語句等價於這條

*/36

while( i < 5)37

4243

for( i=0; i<3; i++)

4449}50

51 (i, j) = 6; //

左邊是乙個逗號表示式

5253 cout << "

i =

"<< i <54 cout << "

j =

"<< j <5556

return0;

57 }

2,輸出結果:

1 func() : i = 0

2 func() : i = 1

3 func() : i = 2

4 func() : i = 3

5 func() : i = 462

7588

90100

110120

130140

15 i = 3

16 j = 6

4,過載逗號操作符:

1 class& operator , (const class& a, const class&b)

2

1,在 c++ 中過載逗號操作符是合法的;

2,使用全域性函式對逗號操作符進行過載;

1,推薦使用全域性函式對逗號操作符進行過載,不要使用成員函式的方式;

3,過載函式的引數必須有乙個是類型別;

4,過載函式的返回值型別必須是引用;

5,過載逗號操作符程式設計實驗:

1,main.cpp 檔案:

1 #include 2 #include 34

using

namespace

std;56

class

test714

intvalue()

1518

};19

20/*

推薦用全域性過載

*/21 test& operator , (const test& a, const test&b)

2225

26 test func(test& i) //

返回值不能為 void,否則報錯;

2732

33int

main()

34

2,輸出結果:

func() : i = 1

func() : i = 0

13,結論:

1,從右向左執行逗號表示式中的表示式;

2,最終結果是逗號表示式最後乙個值;

4,當不過載逗號操作符的時候:

1,輸出結果:

func() : i = 0

func() : i = 1

12,嚴格的按照從左向右的順序執行逗號表示式中的表示式,並返回最後乙個子表示式的值;

5,結論:

1,工程中,最沒必要過載的就是逗號表示式;

6,過載逗號操作符:

1,問題的本質分析:

1,c++ 通過函式呼叫擴充套件操作符的功能;

2,進入函式體前必須完成所有引數的計算;

3,函式引數的計算次序是不定的;

4,過載後無法嚴格從左向右計算表示式;

2,工程中不要過載逗號操作符;

7,小結:

1,逗號表示式從左向右順序計算每個子表示式的值;

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

3,操作符過載無法完全實現逗號操作符的原生意義;

4,工程開發中不要過載逗號操作符;

逗號操作符過載

逗號操作符語義 將多個子表示式連線為乙個表示式,整個表示式的值是最後乙個表示式的值。前 個表示式可以沒有返回值。從左到右計算每個子表示式的值。逗號操作的過載 使用全域性函式對逗號操作符進行過載。過載函式引數必須有乙個是類型別。過載函式返回值型別必須是引用。class operator const c...

C 語法小記 過載逗號操作符

過載逗號操作符 不建議過載逗號操作符 不能實現左到右依次計算每乙個表示式的值,過載之後為隨機順序,原因如下 不過載逗號操作符也可以進行逗號運算 結論 不建議過載逗號操作符 1 include 2 include 34 using namespace std 56 class test714 intv...

C 逗號操作符的含義以及過載

逗號操作符 在c c 中的原生語義 1 逗號表示式用於將多個子表示式連線為乙個表示式 2 逗號表示式的值為最後乙個子表示式的值 3 逗號表示式的前n 1個子表示式可以沒有返回值 4 逗號表示式按照從左到右的順序計算每個子表示式的值 例子 include include using namespace...