逗号操作符
- 多个表达式连接
- 值为最后一个表达式的返回值
- 顺序从左向右
逗号表达式的陷阱
#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}
};
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;
cout << "i = " << i << endl;
cout << "j = " << j << endl;
return 0;
}
重载逗号操作符
- 合法
- 参数必须有一个类类型
- 返回值类型引用
- 推荐用全局函数
#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 = operator , (t0, t1);
cout << tt.value() << endl;
return 0;
}
问题本质同逻辑表达式重载一样
总结
- 不要重载都哈表达式
- 多个表达式连接
- 值为最后一个表达式的返回值
- 顺序从左向右