重载逗号操作符
-
逗号操作符算法:从左到右依次计算每一个表达式的值,整个逗号表达式的值等于最右边表达式的值,前面n-1个表达式可以没有返回值
-
重载逗号操作符:
-
参数必须有一个class成员
-
重载函数返回值类型必须是引用
-
使用全局函数对逗号操作符进行重载
-
-
不建议重载逗号操作符:不能实现左到右依次计算每一个表达式的值,重载之后为随机顺序,原因如下:
-
重载逗号操作符的本质是函数调用
-
进行函数调用之前,需要先计算出所有参数的值,且顺序是随机的
-
-
不重载逗号操作符也可以进行逗号运算
-
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 Test& operator , (const Test& a, const Test& b) 21 { 22 return const_cast<Test&>(b); 23 } 24 25 Test func(Test& i) 26 { 27 cout << "func() : i = " << i.value() << endl; 28 return i; 29 } 30 31 int main() 32 { 33 Test t0(0); 34 Test t1(1); 35 Test tt = (func(t0), func(t1)); // 逗号重载函数,入参时采用从右向左调用。违反了逗号操作符的从左往右运行的语义。 36 cout << tt.value() << endl; // 1 37 return 0; 38 }