c ++中的逗号运算符

时间:2013-06-15 09:15:18

标签: c++ class operator-overloading output

以下是代码。

#include<iostream>

using namespace std;

class x {
    int a;
public :
    x(int t=2):a(t) {}
    void print (){
        cout <<"value is "<<a;
    }
    x& operator,(x&a){
        return *this;
    }
};

int main(){
    x a(1),b(2),c(3),d(4);
    x t=(a,b,c,d);
    t.print();
    return 0;
}

输出 value is 1
请解释为什么该行中的值不是4 x t =(a,b,c,d);

1 个答案:

答案 0 :(得分:2)

x t = (a,b,c,d);

无论评估此表达式的顺序如何,最左侧的操作数将始终返回,因为this中的x& operator , (x &instance)指的是左操作数,而instance指的是右边的操作数

因此返回a,您的打印值为1

如果您没有重载逗号运算符,则可能会得到4,因为(a, b, c)之类的表达式将返回最右侧的操作数。