日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++中逗号操作符重载的分析

發布時間:2025/5/22 c/c++ 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++中逗号操作符重载的分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

?

2,逗號操作符:

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

?????? 1,逗號表達式用于將多個表達式連接為一個表達式;

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

?????? 2,逗號表達式的值為最后一個子表達式的值;

?????????? 1,最后一個必須有值;

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

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

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

??????

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

??? 1,main.cpp 文件:

1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 6 void func(int i) 7 { 8 cout << "func() : i = " << i << endl; 9 } 10 11 int main() 12 { 13 int a[3][3] = { 14 (0, 1, 2), // 用了括號,就變成逗號表達式,只有一個值 2; 15 (3, 4, 5), // 用了括號,就變成逗號表達式,只有一個值 5; 16 (6, 7, 8) // 用了括號,就變成逗號表達式,只有一個值 8; 17 }; 18 /* 19 // 更改如下方可 20 int a[3][3] = { 21 {0, 1, 2}, 22 {3, 4, 5}, 23 {6, 7, 8} 24 }; 25 */ 26 27 int i = 0; 28 int j = 0; 29 30 while( i < 5 ) 31 func(i), // 這里是一個逗號表達式; 32 33 i++; 34 35 /* 上條語句等價于這條 */ 36 while( i < 5 ) 37 { 38 func(i); 39 40   i++; 41 } 42 43 for( i=0; i<3; i++) 44 { 45 for(j=0; j<3; j++) 46 { 47 cout << a[i][j] << endl; 48 } 49 } 50 51 (i, j) = 6; // 左邊是一個逗號表達式 52 53 cout << "i = " << i << endl; 54 cout << "j = " << j << endl; 55 56 return 0; 57 }

 2,輸出結果:

1 func() : i = 0 2 func() : i = 1 3 func() : i = 2 4 func() : i = 3 5 func() : i = 4 6 2 7 5 8 8 9 0 10 0 11 0 12 0 13 0 14 0 15 i = 3 16 j = 6

???

4,重載逗號操作符:

1 Class& operator , (const Class& a, const Class& b) 2 { 3 return const_cast<Class&>(b); // 返回第二個參數; 4 }

??? 1,在 C++ 中重載逗號操作符是合法的;

??? 2,使用全局函數對逗號操作符進行重載;

?????? 1,推薦使用全局函數對逗號操作符進行重載,不要使用成員函數的方式;

??? 3,重載函數的參數必須有一個是類類型;

??? 4,重載函數的返回值類型必須是引用;

???

5,重載逗號操作符編程實驗:

??? 1,main.cpp 文件:

1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 6 class Test 7 { 8 int mValue; 9 public: 10 Test(int i) 11 { 12 mValue = i; 13 } 14 int value() 15 { 16 return mValue; 17 } 18 }; 19 20 /* 推薦用全局重載 */ 21 Test& operator , (const Test& a, const Test& b) 22 { 23 return const_cast<Test&>(b); 24 } 25 26 Test func(Test& i) // 返回值不能為 void,否則報錯; 27 { 28 cout << "func() : i = " << i.value() << endl; 29 30 return i; 31 } 32 33 int main() 34 { 35 Test t0(0); 36 Test t1(1); 37 Test tt = (func(t0), func(t1)); // ==> Test tt = func(t1); ==> Text tt = (operator , (func(t0), func(t1))); 38 39 cout << tt.value() << endl; // 1 40 41 return 0; 42 }

 2,輸出結果:

? ?  func() : i = 1

???  func() : i = 0

???  1

??? 3,結論:

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

?????? 2,最終結果是逗號表達式最后一個值;

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

?????? 1,輸出結果:

?????????? ??? func() : i = 0

    func() : i = 1

    1

?????? 2,嚴格的按照從左向右的順序執行逗號表達式中的表達式,并返回最后一個子表達式的值;

??? 5,結論:

?????? 1,工程中,最沒必要重載的就是逗號表達式;

?

6,重載逗號操作符:

??? 1,問題的本質分析:

?????? 1,C++ 通過函數調用擴展操作符的功能;

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

?????? 3,函數參數的計算次序是不定的;

?????? 4,重載后無法嚴格從左向右計算表達式;

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

???

7,小結:

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

??? 2,逗號表達式的值為最后一個子表達式的值;

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

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

轉載于:https://www.cnblogs.com/dishengAndziyu/p/10913855.html

總結

以上是生活随笔為你收集整理的C++中逗号操作符重载的分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。