逗号操作符重载

逗号操作符语义:

  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;
}

 

posted @ 2019-05-09 17:38  张不源  Views(242)  Comments(0Edit  收藏  举报