[英]C++: Returning a member variable by reference in member function
假設我具有以下結構:
class HeavyClass {
public:
static inline HeavyClass const &get() { // note the &
return h_;
}
private:
static HeavyClass h_;
};
HeavyClass HeavyClass::h_();
int main() {
HeavyClass foo = HeavyClass::get(); // critical line
return 0;
}
我的問題是,這實際上會滿足我在關鍵線上的要求嗎? 也就是說,foo是h_的副本,還是實際上是通過引用傳遞的h_?
非常感謝!
我認為您需要類似的東西:
const HeavyClass& foo = HeavyClass::get();
如果您希望foo
為h_
。
您正在復制。
函數get
確實確實返回了引用,但是您正在按值分配它:
HeavyClass foo = HeavyClass::get(); // critical line
在關鍵點上,關鍵部分是foo
的定義。 foo
不是對HeavyClass
的引用-它本身就是HeavyClass
。 因此, foo
不能引用任何東西。
C ++中沒有魔術,只有邏輯。 好吧,也許有魔術,但是沒有一個是隱藏的。 一切都在眼前。 在這里,您宣布HeavyClass
,而不是一個參考TO- HeavyClass
,所以它不會奇跡般地變成了參考。
如果要引用,請像這樣聲明foo:
const HeavyClass& foo = HeavyClass::get()
順便說一句,您似乎正在嘗試構建Singleton。 請至少進行研究並充分理解為什么在繼續之前,單身人士通常被認為是不好的所有觀點。
右側的值與確定已聲明為HeavyClass
類型的變量的類型HeavyClass
。 因此,將使用右側的值實例化並初始化該類型的新對象。 右側是左值這一事實無關緊要(它將接受左值到右值的轉換)。
無論是函數的返回類型是引用還是不不會改變函數調用的價值 ,只有價值范疇 。
請注意,這與auto
完全相同:如果您說過auto x = HeavyClass::get();
,出於相同的原因( auto
推導類型,而不是值類別),結果會相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.