c++ - 为什么在成员函数中返回对 ostream 对象的引用以进行序列化

标签 c++ serialization reference iostream

<分区>

//使用命名空间标准;

下面是一段代码

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/

相关文章:

java - 引用的 XML 序列化

java - 对象内部的静态对象引用被复制吗?

windows - UWP 中的 X509Certificates

c++ - qi::phrase_parse 返回真,即使调用了 qi::on_error

c++ - cppreference.com上C++ 20的奇怪atomic_flag示例

c++ - Visual C++ 和 C++ 生成器

c++ - g++和gcc有什么区别?

serialization - 多行,行以空格开头

python-3.x - DRF ModelSerializer 使所有字段只读,而无需明确指定它们

reference - 如何为对结构的引用实现 Add 特性?