1.逗號(hào)操作符可以用于將多個(gè)子表達(dá)式連接為一個(gè)表達(dá)式 2.逗號(hào)表達(dá)式的值為最后一個(gè)子表達(dá)式的值 3.逗號(hào)表達(dá)式的前N-1個(gè)子表達(dá)式可以沒(méi)有返回值 4.逗號(hào)表達(dá)式按照從左往右的順序計(jì)算每個(gè)子表達(dá)式的值
#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) };//注意用了括號(hào),所以最終只有2,5,8用來(lái)初始化前三個(gè) int i = 0; int j = 0; while( i < 5 ) func(i), i++;//不會(huì)死循環(huán) for(i=0; i<3; i++) { for(j=0; j<3; j++) { cout << a[i][j] << endl; } } (i, j) = 6;//最后相當(dāng)于給j賦值 cout << "i = " << i << endl; cout << "j = " << j << endl; return 0;}輸出結(jié)果func() : i = 0func() : i = 1func() : i = 2func() : i = 3func() : i = 4258000000i = 3j = 61.在c++中重載逗號(hào)操作符是合法的 2.使用全局函數(shù)對(duì)逗號(hào)操作符進(jìn)行重載 3.重載函數(shù)的參數(shù)必須有一個(gè)是類類型 4.重載函數(shù)的返回值類型必須是引用
class Operator , (const class& a, const class& b){ return const_cast<class&>(b);//注意返回的是最后的參數(shù)}#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))參數(shù)的計(jì)算順序不確定 cout << tt.value() << endl; // 1 return 0;}輸出結(jié)果:func() : i = 1func() : i = 01但若把逗號(hào)操作符重載函數(shù)去掉則會(huì)得到正確結(jié)果1.c++通過(guò)函數(shù)調(diào)用擴(kuò)展操作符的功能 2.進(jìn)入函數(shù)體前必須完成所有參數(shù)的計(jì)算 3.函數(shù)參數(shù)的計(jì)算次序是不定的 4.重載后無(wú)法嚴(yán)格從左向右計(jì)算表達(dá)式
注意:工程中無(wú)需重載逗號(hào)操作符
1.逗號(hào)表達(dá)式從左往右順序計(jì)算每個(gè)子表達(dá)式的值 2.逗號(hào)表達(dá)式的值為最后一個(gè)子表達(dá)式的值 3.操作符重載無(wú)法完全實(shí)現(xiàn)逗號(hào)操作符的原生語(yǔ)義 4.工程開(kāi)發(fā)中不要重載逗號(hào)操作符
|
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注