我不明白我什麼時候想要返回一個函數的引用(即T& func(){...}
)。什麼時候你會返回一個函數的引用?
例如:
T& func() {
Something t;
return t;
}
這將創建一個名爲t
一個Something
實例,然後通過引用返回。當我們超出範圍時,t
丟失。所以參考是指0
我認爲..?
換句話說,爲什麼我會想要返回一個引用或一個const引用?請解釋並舉例說明。
我不明白我什麼時候想要返回一個函數的引用(即T& func(){...}
)。什麼時候你會返回一個函數的引用?
例如:
T& func() {
Something t;
return t;
}
這將創建一個名爲t
一個Something
實例,然後通過引用返回。當我們超出範圍時,t
丟失。所以參考是指0
我認爲..?
換句話說,爲什麼我會想要返回一個引用或一個const引用?請解釋並舉例說明。
當您從某個函數的參數中返回成員時,通常會這樣做。從標準庫的一個例子:
template<class T, size_t n>
struct array
{
T data[n];
T& operator[](size_t i) { return data[i]; }
};
有時你返回到一個函數中定義一個靜態變量的引用:
T& func() {
static Something t; // this will exist until program closes
return t;
}
這是一種技術,以幫助包括靜態初始化的順序作戰的問題。
顯然成員變量是有意義的(我敢肯定,你不問那些雖然):
T& MyType::func() {
return this->t; // persists with the object
}
而且有時你想返回在傳遞給函數的對象:
std::ostream& operaor<<(std::ostream& os, const MyType& t) {
// blah blah
return os; // pass it back out
}
這可讓您鏈功能結合在一起,如:
if(std::getline(input >> size >> std::ws, line))
{
// size and line were successfully read here
}
你能想到的引用只是指針而已。每當你從函數返回一個指針時,你可能會返回一個引用類型。
我認爲你的問題與返回引用是範圍的問題。只要沒有範圍問題,它就是您可以使用的另一種工具。
返回對當前對象的引用用於實現用戶定義的賦值運算符。
class Foo
{
Foo& operator=(const Foo&);
//...
};
實現運營商+=
,-=
,*=
等的過載時,它也可以用來作爲返回類型,這些運營商表明,返回類型爲調整後的當前對象,而不是一個新的對象。因此,要返回當前對象,請返回對*this
的引用。
對函數中定義的靜態變量返回引用並不少見。成員函數也經常返回引用。每當引用是一個持續時間比該函數更長的對象時,如果這是有意義的。 – Galik 2014-10-05 23:42:33
另一個例子是max。請仔細關注樣本實施中的返回類型http://www.cplusplus.com/reference/algorithm/max/ – 2014-10-05 23:51:01
參考文獻如何神奇地開始參考「0」?那有什麼意思? – 2014-10-06 00:04:00