Ale*_*Dan 5 c++ overloading operator-keyword
我想打印出一个用户定义类型的对象,就像cout << ob1;
这样我想重载operator <<并且我希望按值返回而不是通过引用但是它给了我一个错误:在两个名为iosfwd和ios_base的文件中. H
ostream operator<<( ostream& out, cat& rhs){
out << rhs.a << ", " << rhs.b << endl;
return out ;
}
Run Code Online (Sandbox Code Playgroud)
1)是因为它不能创建一个新的ostream对象,这就是为什么它必须通过引用返回?
但是当我像这样通过引用返回时:
ostream& operator<<( ostream& out, cat& rhs){
out << rhs.a << ", " << rhs.b << endl;
return out ;
}
Run Code Online (Sandbox Code Playgroud)
它工作正常.
2)有什么解释吗?
Naw*_*waz 15
在第一个示例中,您返回了一个不允许的流对象的副本,因为C++ 中的所有流类的复制构造函数(以及复制赋值)都是通过创建它们来禁用的private.
由于您无法复制流对象,因此您需要通过引用返回它,您在第二个示例中执行此操作,这就是它工作正常的原因.
您可以选择根本不返回任何内容(即您可以返回类型void),但如果您这样做,那么您将无法链接为stream << a << b.您对他们分别为写stream <<a,然后stream << b.
如果您想知道为什么禁用复制流对象,请在此处查看我的答案: