0

我正在阅读一本解释以下功能的 C++ 书:

istream& read_hw(istream& in, vector<double>& hw) {
    if (in) {
        hw.clear() ;
        double x;
        while (in >> x)
            hw.push_back(x);
        in.clear();
    }
    return in;
}

这本书解释了参数列表中的那些“&”意味着它们是通过引用传递的,但是istream&在函数的返回类型中没有关于 : 中的那个符号的解释。
删除它会导致许多编译错误。有人可以澄清吗?

4

4 回答 4

3

该函数也通过引用返回。在这种情况下,您传入的对象是从函数返回的,因此您可以“链式”调用此函数:

in.read_hw(hw1).read_hw(hw2);

这是 C++ 中的常见模式,尤其是在使用 IOstreams 库时。

于 2013-02-11T22:09:04.890 回答
1

这将返回对 istream 的引用。请注意,这可能与作为参数传递的 istream& 引用相同。

learncpp.com

通过引用返回通常用于将通过引用传递给函数的参数返回给调用者。在下面的示例中,我们返回(通过引用)一个数组元素,该元素通过引用传递给我们的函数:

// This struct holds an array of 25 integers
struct FixedArray25
{
    int anValue[25];
};

// Returns a reference to the nIndex element of rArray
int& Value(FixedArray25 &rArray, int nIndex)
{
    return rArray.anValue[nIndex];
}

int main()
{
    FixedArray25 sMyArray;

    // Set the 10th element of sMyArray to the value 5
    Value(sMyArray, 10) = 5;

    cout << sMyArray.anValue[10] << endl;
    return 0;
}
于 2013-02-11T22:10:09.443 回答
1

在“istream& in”中,& 运算符的意思是“参考”

只要知道你在这里传入的任何变量,原始值都会被修改

于 2013-02-11T22:12:15.780 回答
0

这是一个参考。它就像一个指针,但它不能为 NULL。

因此,您的函数正在返回对istream对象的引用。请注意,您还将与第一个参数相同的数据类型传递给您的函数。

对流执行此操作很常见,因此您可以使用流测试运算符来检查错误情况:

if( !read_hw(in, hw) ) cerr << "Read failed\n";
于 2013-02-11T22:09:56.757 回答