森狼藤野 2023-11-24 10:29 采纳率: 66.7%
浏览 27
已结题

c++ 左移运算符重载

为什么函数只能返回ostream&而不能返回ostream

`


class a
{

};
ostream& operator<<(ostream& cout,a &b)
{
    return cout;
}
int main()
{ 
    a b;
    cout << b;
}

```

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-24 13:12
    关注

    【以下回答由 GPT 生成】

    在C++中,左移运算符重载的函数必须返回ostream&而不能返回ostream的原因是为了支持连续的左移运算。

    左移运算符实际上是一个二元运算符,它接受两个参数——左操作数和右操作数。当我们使用cout << b时,cout被视为左操作数,而b被视为右操作数。左移运算符的重载函数实际上是作为成员函数调用的,因此,可以将上述的运算表达式看作是cout.operator<<(b)

    为了实现连续的左移运算,也就是cout << b1 << b2 << b3,重载函数必须返回一个值,以便我们可以通过返回的ostream对象继续调用左移运算符。

    如果重载的函数返回类型是ostream,而不是ostream&,那么在连续的左移运算中,后续的操作将会作用在临时对象上,而不是原始的cout对象上。这将导致预期的输出无法实现。

    因此,在重载左移运算符时,函数类型必须是ostream&,这样才能返回原始的cout对象的引用,从而实现连续的左移运算。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月2日
  • 已采纳回答 11月24日
  • 创建了问题 11月24日

悬赏问题

  • ¥15 系统 24h2 专业工作站版,浏览文件夹的图库,视频,图片之类的怎样删除?
  • ¥15 怎么把512还原为520格式
  • ¥15 MATLAB的动态模态分解出现错误,以CFX非定常模拟结果为快照
  • ¥15 求高通平台Softsim调试经验
  • ¥15 canal如何实现将mysql多张表(月表)采集入库到目标表中(一张表)?
  • ¥15 wpf ScrollViewer实现冻结左侧宽度w范围内的视图
  • ¥15 栅极驱动低侧烧毁MOSFET
  • ¥30 写segy数据时出错3
  • ¥100 linux下qt运行QCefView demo报错
  • ¥50 F1C100S下的红外解码IR_RX驱动问题