<分区>
//使用命名空间标准;
下面是一段代码
ostream& write(ostream& os) const {
os << getRe() << "j " << getIm();
return os;
}
这是表示复数的类(“PComplex”)中的成员函数,它派生自抽象类(“Serializable”)。(纯虚函数的实现)。
我的主要问题是为什么我们需要返回对 ostream 对象的引用?为什么不作废?
<分区>
//使用命名空间标准;
下面是一段代码
ostream& write(ostream& os) const {
os << getRe() << "j " << getIm();
return os;
}
这是表示复数的类(“PComplex”)中的成员函数,它派生自抽象类(“Serializable”)。(纯虚函数的实现)。
我的主要问题是为什么我们需要返回对 ostream 对象的引用?为什么不作废?
最佳答案
返回 ostream&
object 允许我们将一堆运算符链接在一起。
考虑这个声明
cout << "Hello " << "World";
这实际上是对 ostream& operator<<(ostream& os, const char* c)
的两次调用.如果我们考虑执行顺序,我们得到:
(cout << "Hello ") << "World";
这个函数接受 cout
在左边和"Hello "
在右侧。它将右侧的内容打印到控制台,然后返回 cout
.我们考虑第一步之后还剩下什么:
(cout) << "World";
现在我们去掉括号,得到:
cout << "World;
这个比较容易处理。现在我们再次调用该函数来打印 `"World"并再次返回 cout,我们将不对其进行任何操作。
如果我们返回 void
而不是 ostream&
, 然后 (cout << "Hello ")
会减少到(void)
.那会给我们留下:
(void) << "World";
这不匹配任何重载,因此我们会得到一个错误。而 (cout << "Hello ")
仍然有效,我们将无法链接 << "World"
在同一条线上。
关于c++ - 为什么在成员函数中返回对 ostream 对象的引用以进行序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43769519/