任何一個可以給我解釋一下這兩個函數的區別是:C++和返回參考
int& test(int a)
{
return a;
}
和
int test(int a)
{
return a;
}
,並告訴我是什麼目的,當我們使用「&」操作後函數的返回類型? 我們什麼時候應該使用它,因爲我以前很少見過它。
任何一個可以給我解釋一下這兩個函數的區別是:C++和返回參考
int& test(int a)
{
return a;
}
和
int test(int a)
{
return a;
}
,並告訴我是什麼目的,當我們使用「&」操作後函數的返回類型? 我們什麼時候應該使用它,因爲我以前很少見過它。
任何人都可以向我解釋這兩個函數之間的區別嗎?
第一個示例可能會產生未定義的行爲,因爲返回的引用「指向」一個在函數結束時被銷燬的變量。這與dangling pointer的定義非常相似(幾乎相同)。
第二種情況是在上面指定的示例中返回變量的正常「正確」方式。
,並告訴我,當我們使用「&」運算符函數的返回類型之後的目的是什麼?
&
&
在返回語句中的類型之後的用途是返回對該類型的引用。
我們什麼時候使用它,因爲我很少見過。
通常,傳遞引用或返回引用對於避免傳遞/返回參數的副本是有用的,這可能是代價高昂的。
由於C++ 11有更好的方式來處理返回大對象:move semantics。
在其他情況下,它用於提供對班級內部成員的訪問。這是std::string::operator[]
例如例如:它也可以用來允許函數調用鏈
char& operator[] (size_t pos);
const char& operator[] (size_t pos) const;
。這是:
std::cout << 'H' << 'e' << 'l' << 'l' << 'o';
例如。在上面的代碼中,std::ostream::operator<<
返回對自身的引用。
'&'返回類型後的運算符表示該函數返回一個引用。它是有道理的,它的吸氣方法,如
class A{
public:
int &val(){return _val;}
private:
int _val;
};
好處是,你可以讀取和修改對象的狀態。例如:
A a;
a.val() = 10;
但它在你的情況下,它可能是更好的傳遞給函數的引用而不是返回它:
void test(int &a)
{
//do something with a
}
這是不好的引用返回本地功能對象,例如:
int& test()
{
int x;
return x;
}
因爲x
不存在外部測試()函數。
感謝提到getter和setter,它很容易瞭解 – dinhha471
第一個是危險的,因爲變量的範圍。如果你想這樣做,你應該使變量靜態。
您通常不希望將其用作此處顯示的確切原因的返回類型。 – chris
http://stackoverflow.com/a/2273821/78845 – Johnsyweb
它不是一個「運營商」。這恰好是'&'字符恰好是某些操作符中使用的相同字符。 – AnT