簡體   English   中英

C ++:通過成員函數中的引用返回成員變量

[英]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();

如果您希望fooh_

您正在復制。

函數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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM