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

标签 c++ pointers reference

假设我有以下结构:

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/

相关文章:

c++ - 如何接受可修改和不可修改的参数?

python - 将 numpy 对象传递给 pythonqt 包装器

c++ - VS2008 附加调试器 (C++) 来处理 assert(...)

c++ - MPI 发送传递指针指针 c++

r - 在 C++ 函数中,如何将 Rcpp 对象传递给其他函数(通过引用或复制)?

c - 为什么 Golang 比 ANSI C 快,我该如何优化我的解决方案?

c - 使用函数在数组中查找最大和最小数

java - 更改 Java 中返回的对象

c++ - 返回时奇怪的 C++ 引用失效

c++ - std::vector 的类似安置结构