1.逗號操作符可以用于將多個子表達式連接為一個表達式 2.逗號表達式的值為最后一個子表達式的值 3.逗號表達式的前N-1個子表達式可以沒有返回值 4.逗號表達式按照從左往右的順序計算每個子表達式的值
#include <iostream>#include <string>using namespace std;void func(int i){ cout << "func() : i = " << i << endl;}int main(){ int a[3][3] = { (0, 1, 2), (3, 4, 5), (6, 7, 8) };//注意用了括號,所以最終只有2,5,8用來初始化前三個 int i = 0; int j = 0; while( i < 5 ) func(i), i++;//不會死循環 for(i=0; i<3; i++) { for(j=0; j<3; j++) { cout << a[i][j] << endl; } } (i, j) = 6;//最后相當于給j賦值 cout << "i = " << i << endl; cout << "j = " << j << endl; return 0;}輸出結果func() : i = 0func() : i = 1func() : i = 2func() : i = 3func() : i = 4258000000i = 3j = 61.在c++中重載逗號操作符是合法的 2.使用全局函數對逗號操作符進行重載 3.重載函數的參數必須有一個是類類型 4.重載函數的返回值類型必須是引用
class Operator , (const class& a, const class& b){ return const_cast<class&>(b);//注意返回的是最后的參數}#include <iostream>#include <string>using namespace std;class Test{ int mValue;public: Test(int i) { mValue = i; } int value() { return mValue; }};Test& operator , (const Test& a, const Test& b){ return const_cast<Test&>(b);}Test func(Test& i){ cout << "func() : i = " << i.value() << endl; return i;}int main(){ Test t0(0); Test t1(1); Test tt = (func(t0), func(t1));// operator , (func(t0),func(t1))參數的計算順序不確定 cout << tt.value() << endl; // 1 return 0;}輸出結果:func() : i = 1func() : i = 01但若把逗號操作符重載函數去掉則會得到正確結果1.c++通過函數調用擴展操作符的功能 2.進入函數體前必須完成所有參數的計算 3.函數參數的計算次序是不定的 4.重載后無法嚴格從左向右計算表達式
注意:工程中無需重載逗號操作符
1.逗號表達式從左往右順序計算每個子表達式的值 2.逗號表達式的值為最后一個子表達式的值 3.操作符重載無法完全實現逗號操作符的原生語義 4.工程開發中不要重載逗號操作符
新聞熱點
疑難解答