逗号操作符(,
)可以构成逗号表达式
exp1,exp2,exp3,...,expN
示例1:逗号表达式
Demo
#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;
}
编译运行
func() : i = 0
func() : i = 1
func() : i = 2
func() : i = 3
func() : i = 4
2
5
8
0
0
0
0
0
0
i = 3
j = 6
在 C++ 中重载逗号是合法的
使用全局函数对逗号操作符进行重载
重载函数的参数必须有一个是类类型
重载函数的返回值类型必须是引用
ClassName& operator , (const ClassName& a, const ClassName& b)
{
return const_cast<ClassName&>(b);
}
示例:重载逗号操作符
Demo
#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 = func(t1);
cout << tt.value() << endl; // 1
return 0;
}
编译运行
func() : i = 1
func() : i = 0
1
存在的问题:从右往左计算表达式
问题分析
结论:工程中不要重载逗号操作符
原文:https://www.cnblogs.com/bky-hbq/p/13903878.html