1,關注逗號操作符過載後帶來的變化;
2,逗號操作符:
1,逗號操作符(,)可以構成都好表示式:exp1, exp2, exp3, ..., expn
1,逗號表示式用於將多個表示式連線為乙個表示式;
1,就是用來起連線不同語句作用的;
2,逗號表示式的值為最後乙個子表示式的值;
1,最後乙個必須有值;
3,逗號表示式中的前 n - 1 個子表示式可以沒有返回值;
4,逗號表示式按照從左向右的順序計算每個子表示式的值;
1,不能違反這個原生語義;
3,逗號表示式的示例例項分析:
1,main.cpp 檔案:
1 #include 2 #include 34using
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 = 02 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 34using
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...