使用运算符<< with const 对象

Using operator<< with const object

本文关键字:lt const 对象 with 运算符      更新时间:2023-10-16

我有一个重载操作符的问题<<对于const对象。我找不到问题所在

#include <iostream>
using namespace std;
class T
{
    friend ostream& operator<<(ostream& os,T& t)
    {
        os << "Val : " << t.value << endl;
        return os;
    }
private:
    int value;
public:
    T(int v) { value=v; }
    int getValue() const { return value; }
};
int main()
{
    const T t(2);
    cout << t;
    return 0;
}

编译器信息:

error C2679: binary '<<':没有找到接受右操作符的操作符'const T'类型的操作数(或者没有可接受的转换)

您的operator<<()不能与const对象一起工作,因为您已将其声明为

friend ostream& operator<<(ostream& os,T& t)

你需要告诉编译器,你希望能够使用它与const对象:

friend ostream& operator<<(ostream& os, const T& t)

您的operator<<通常应该通过const引用获取其参数:

friend ostream& operator<<(ostream& os, const T& t)

const引用不能绑定到const对象。这是有意义的,否则您可以通过引用修改const对象。

只要添加一个const就可以了:

friend ostream& operator<<(ostream& os,const T& t)

使T&成为const的参考:

friend ostream& operator<<(ostream& os,T& t)

就变成了

friend ostream& operator<<(ostream& os,const T& t)

或者去掉&:

friend ostream& operator<<(ostream& os,T t)

都将在您的代码中给出以下结果:

Val : 2