c++ - 在 getter 函数中返回 const 引用或拷贝?

默认情况下,从 getter 函数返回拷贝 (1) 或引用 (2) 更好?

class foo {
public:
    std::string str () { // (1)
        return str_;
    }

    const std::string& str () { // (2)
        return str_;
    }

private:
    std::string str_;
};

我知道 2) 可能会更快,但由于 (N)RVO 而不必如此。 1) 对于悬空引用更安全,但对象可能会过期或永远不会存储引用。

当您编写类(class)但(尚)不知道性能和生命周期问题是否重要时,您的默认设置是什么?

附加问题:当成员不是纯字符串而是 vector 时,游戏是否会改变?

最佳答案

这真的取决于你对 默认行为 的期望。

您是否希望调用者看到对他们的 str_unbeknownst(真是一个词!)所做的更改?然后你需要传回一个引用。如果您可以拥有一个 refcounted 数据成员并将其返回,那可能会很好。

如果您希望调用者得到一份拷贝,请执行 1)。

https://stackoverflow.com/questions/2182408/

相关文章:

c++ - 打包结构是可移植的吗?

c++ - QObject 多重继承

c++ - 为什么这个包含 rand() 的 C++11 代码多线程比单线程慢?

c++ - std::vector 是 `user-defined type` 吗?

c++ - 我们可以有一个虚拟静态方法吗? (c++)

c++ - 访问类中定义的 friend 功能

c++ - C 和 C++ 中的多字 rune 字

c++ - 为什么 unique_ptr 实例化编译为比原始指针更大的二进制文件?

c++ - 对于所有对象类型 T,sizeof(T) >= alignof(T) 是否总是如此?

c++ - 为什么我们在 C++ 中使用 std::function 而不是原来的 C 函数指针?