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 に答える