使用运算符<< with const 对象
Using operator<< with const object
我有一个重载操作符的问题<<对于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