逗号操作符语义:
1.将多个子表达式连接为一个表达式,整个表达式的值是最后一个表达式的值。
2.前n-1个表达式可以没有返回值。
3.从左到右计算每个子表达式的值。
逗号操作的重载:
1.使用全局函数对逗号操作符进行重载。
2.重载函数参数必须有一个是类类型。
3.重载函数返回值类型必须是引用。
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)); // 逗号重载函数,入参时采用从右向左调用。违反了逗号操作符的从左往右运行的语义。 // Test tt = operator , (func(t0),func(t1)); // Test tt = func(t1); cout << tt.value() << endl; // 1 return 0; }