gpt4 book ai didi

c++ - 为什么 operator<< 的重载必须通过引用返回?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:55:28 24 4
gpt4 key购买 nike

我想打印出一个用户定义类型的对象,像这样 cout << ob1;所以我想重载 operator<< 并且我想按值而不是按引用返回,但它给了我一个错误:在两个名为 iosfwdios_base.h

ostream operator<<( ostream& out, cat& rhs){
out << rhs.a << ", " << rhs.b << endl;
return out ;
}

1)是不是因为不能创建新的ostream对象,所以要按引用返回?

但是当我像这样通过引用返回时:

ostream& operator<<( ostream& out, cat& rhs){
out << rhs.a << ", " << rhs.b << endl;
return out ;
}

它工作正常。
2)有什么解释吗?

最佳答案

在第一个示例中,您返回了不允许的流对象拷贝,因为 C++ 中所有 流类的复制构造函数(以及复制赋值)已被禁用让他们制作private .

由于您无法制作流对象的拷贝,因此您需要通过引用 返回它,这是您在第二个示例中所做的,这就是它工作正常的原因。

您可以选择什么都不返回(即您可以将返回类型设置为 void ),但如果您这样做,那么您将无法链接stream << a << b .您必须将它们分别写为 stream <<a然后 stream << b .

如果您想知道为什么无法复制流对象,请在此处查看我的回答:

关于c++ - 为什么 operator<< 的重载必须通过引用返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9646893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com