C++语法小记---重载逗号操作符

重载逗号操作符
  • 逗号操作符算法:从左到右依次计算每一个表达式的值,整个逗号表达式的值等于最右边表达式的值,前面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 }
原文地址:https://www.cnblogs.com/chusiyong/p/11295329.html