參考型別的函式傳回
函式可以宣告為傳回參考的型別。 若要讓這類的宣告兩個原因有:
所傳回的資訊是夠大的物件,傳回參考是效率要比傳回複本。
函式的型別必須是左值。
它可以是將大型物件傳遞更有效率地到 所參考的函式,這也可能是比較有效率的方法傳回的大型物件 從所參考的函式。 參考傳回通訊協定可免除將物件複製到暫存位置,請在傳回之前的必要性。
當函式都必評估為左值時,參考傳回型別可以也很有用。 此類別中,特別指派運算子屬於最多載的運算子。 多載運算子將會涵蓋多載運算子。
範例
請考慮Point範例:
// refType_function_returns.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
class Point
{
public:
// Define "accessor" functions as
// reference types.
unsigned& x();
unsigned& y();
private:
unsigned obj_x;
unsigned obj_y;
};
unsigned& Point :: x()
{
return obj_x;
}
unsigned& Point :: y()
{
return obj_y;
}
int main()
{
Point ThePoint;
// Use x() and y() as l-values.
ThePoint.x() = 7;
ThePoint.y() = 9;
// Use x() and y() as r-values.
cout << "x = " << ThePoint.x() << "\n"
<< "y = " << ThePoint.y() << "\n";
}
Output
x = 7
y = 9
請注意,該函式x和y宣告為傳回的參考型別。 這些函式可以用於任一邊的指派陳述式。
參考型別的宣告都必須包含以外的初始設定式,在下列情況:
明確extern宣告
類別成員的宣告
在類別內宣告
如果函數或傳回型別引數的函式的宣告