【问题标题】:What is the purpose of returning an IO object in C++?在 C++ 中返回 IO 对象的目的是什么?
【发布时间】:2020-04-16 21:06:36
【问题描述】:

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

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

例如:

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

    return input;
}

int main()
{
    get_value(cin);
    return 0;
}

我从高层次上理解这里发生了什么。 get_value 函数具有对输入对象类型的引用,并且它还接受对输入对象的引用,在我的示例中,我曾经常用 cin 对象。我知道这个函数正在控制台中读取用户的输入,并将该输入存储为value

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

【问题讨论】:

  • 您也可以使用cin >> get_value; 来做同样的事情,因为>> 的重载采用带有签名istream&(*)(istream&) 的函数指针来允许这种语法。

标签: c++ input io output


【解决方案1】:

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

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<<
}

如果 operator

cout << b1;
cout << b2;

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

【讨论】:

  • 这是做这种事情的主要/唯一目的吗?所以我们可以将事情链接在一起以减少所需的代码量?
【解决方案2】:

再次使用它来存储另一个 var 存储在缓冲区中。赞get_value(get_value(cin,v1),v2);

#include<iostream>

std::istream &get_value(std::istream &input,int& value)
{
    input >> value;
    return input;
}

int main()
{

    int v1{}, v2 {};
    std::cout<<"Enter two succesive integers: ";
    get_value(get_value(std::cin,v1),v2);
    std::cout<<"\nThe two input integers are "<<v1<<" and "<<v2;
    return 0;
}

【讨论】:

    【解决方案3】:

    您可以使用它来获取另一个输入值;例如:

    input >> value >> value2;
    

    【讨论】:

    • 在这种情况下更确切地说是get_value(get_value(input))。实际上get_value 也会使用 ref 参数来存储结果。
    猜你喜欢
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 2019-10-29
    相关资源
    最近更新 更多