gpt4 book ai didi

C++:在成员函数中通过引用返回成员变量

转载 作者:太空宇宙 更新时间:2023-11-04 15:04:46 26 4
gpt4 key购买 nike

假设我有以下结构:

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_,就好像它是通过引用传递的一样?

非常感谢!

最佳答案

您正在复制。

get 函数确实返回了一个引用,但是您是按值给它赋值:

HeavyClass foo = HeavyClass::get(); // critical line

这里的关键行,关键的部分foo的定义。 foo 不是对HeavyClass 的引用——它本身就是一个HeavyClass。因此,foo 不能对任何东西的引用。

C++ 中没有魔法,只有逻辑。好吧,也许有魔法,但没有一个是隐藏的。这一切都在众目睽睽之下。您在这里声明了一个 HeavyClass,而不是对 HeavyClass 的引用,因此它不会神奇地成为引用。

如果你想要引用,像这样声明 foo:

const HeavyClass& foo = HeavyClass::get()

顺便说一下,您似乎正在尝试构建一个单例。在继续之前,请至少研究并了解为什么单例通常被认为是糟糕的所有论点。

关于C++:在成员函数中通过引用返回成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19167074/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com