2013-02-11 102 views
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&該符號的解釋:在函數的返回類型中。
刪除它會導致許多編譯錯誤。有人可以澄清嗎?

回答

3

該函數也通過引用返回。在這種情況下,傳遞中的對象從函數返回,所以可以「鏈」調用該功能:

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

這是C++的通用模式,尤其是在與輸入輸出流庫時。

0

這是一個參考。它就像一個指針,但不能爲NULL。

因此,您的函數返回對一個istream對象的引用。請注意,您還將與第一個參數相同的數據類型傳遞給函數。

這是很常見的有流要做到這一點,所以你可以使用流測試操作員來檢查錯誤條件:

if(!read_hw(in, hw)) cerr << "Read failed\n"; 
1

這是久違的istream的一個參考。請注意,這可能與作爲參數傳遞的istream &引用相同。

learncpp.com

返回參照通常用於按引用傳遞的參數返回函數返回給調用者。在下面的例子中,我們返回(通過引用)的陣列的元件,其通過引用傳遞到我們的功能:「在istream的&」的&操作者

// 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; 
} 
+0

我明白了。但是爲什麼在這種情況下強制返回參考?我不能返回一個新的istream嗎? – Carcamano 2013-02-11 22:27:14

1

在裝置

「的參考」

只是知道,無論你進入這裏的變量,原來的價值將被修改