在 C++ 中返回 IO 对象的目的是什么?

bmb*_*bmb 1 c++ io input output

我正在尝试通过阅读教科书并做练习题和其他东西来自学 C++,我目前正在学习的主题对我来说有点混乱,我希望得到一些澄清。我在网上寻找我的问题的明确答案,但还没有找到任何东西。

我目前正在学习标准库中 IO 类的详细信息,我现在所在的部分给出了一些具有传递和返回 IO 对象的函数的示例。

例如:

istream &get_value(istream &input)
{
    int value;
    input >> value;

    return input;
}

int main()
{
    get_value(cin);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我从高层次的角度理解这里发生的事情。该get_value函数具有对输入对象类型的引用,并且还接受对输入对象的引用,在我的示例中,我使用了常用cin对象。我知道此函数正在控制台中读取用户的输入并将该输入存储为value.

我不明白的是返回输入对象的原因是什么。为什么这个函数不应该有一个类型void我正在使用的输入对象可以用来做什么?我知道我现在没有用它做任何事情,但它可以用来做什么?

Edw*_*rak 5

返回值使您可以“链接”流运算符<<和之间的调用>>。运算符重载是这种“链接”的一个很好的动机。

using namespace std;
class book {
    string title;
    string author;
public:
    book(string t, string a) : title(t), author(a) { }
    friend ostream &operator<<(ostream &os, const book &x);
}

ostream &operator<<(ostream &os, const book &x)
{
    os << x.title << " by " << x.author << "\n";
    return os;
}

int main()
{
    book b1 { "Around the World in 80 Days", "Jules Verne" };
    book b2 { "The C Programming Language", "Dennis Ritchie" };

    cout << b1 << b2; // chaining of operator<<
}
Run Code Online (Sandbox Code Playgroud)

如果 operator<< 没有返回 ostream,我们将无法将修改后的 ostream 从第一个 operator<< 传递到第二个。相反,我们将不得不写

cout << b1;
cout << b2;
Run Code Online (Sandbox Code Playgroud)

这同样适用于输入操作,就像你的情况一样, >>