首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ostream过载

ostream过载
EN

Stack Overflow用户
提问于 2011-05-27 00:14:00
回答 2查看 358关注 0票数 0
代码语言:javascript
复制
friend ostream& operator<<(ostream& os, MyClass& obj);

我有几个问题:

  1. 为什么需要写“friend”?
  2. 为什么需要在“operator”、“os”和“obj”之前写“&”?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-27 00:24:37

MyClass&中的&使函数接受对MyClass对象的引用,而不是对象本身。(其他的也是如此。)

引用是轻量级的,可以传递,您对obj所做的任何更改都会影响原始对象。如果没有&,您将指示编译器在调用中构造一个全新的MyClass,在返回时销毁它,并丢弃您可能对其内部状态所做的任何更改。

ostream&的返回值通常用于返回相同的ostream&它被传入,这样您就可以编写像cout << "hello " << 42 << endl;这样的移动链,并让它们按照您期望的方式运行。(您可以让它返回一些不同的东西- C++很容易完全打乱人们的期望-但不要这么做。)

票数 0
EN

Stack Overflow用户

发布于 2011-05-27 00:49:06

。为什么我需要写“朋友”?

ostream改变了左参数(改变了流的状态),因此根据通用运算符重载语义,它应该作为左操作数类型的成员来实现。然而,它的左操作数是来自标准库的流,当你为自己的类型实现输出和输入操作时,你不能改变标准库的流类型。这就是为什么你需要为你自己的类型实现这些运算符作为非成员函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6141695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档