gpt4 book ai didi

C++ get 方法 - 按值或按引用返回

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:09:13 25 4
gpt4 key购买 nike

我问了一个非常简单的问题,但不幸的是我自己想不出答案。

假设我有一些数据结构来保存设置并充当设置映射。我有一个 GetValue(const std::string& name) 方法,它返回相应的值。

现在我想弄清楚 - 哪种返回值方法会更好。显而易见的方法是让我的方法像

std::string GetValue(const std::string& name) const

并返回对象的拷贝并在性能方面依赖于 RVO。

另一种是制作两种方法

std::string& GetValue(...)
const std::string& GetValue(...) const

这通常意味着复制代码或使用一些邪恶的常量转换来两次使用这些例程之一。

#Q

在这种情况下你会做出什么选择,为什么?

最佳答案

实际上我可能会使用:

std::string GetValue(const std::string& name) const;
// or
const std::string* GetValue(const std::string& name) const;

void SetValue(std::string name, std::string value);

二传手优先:

  • SetValue 中按值传递允许编译器进行一些无法通过 const-reference 传递的优化,Dave Abrahams 在一篇文章中对此进行了解释,"Want Speed? Pass by Value."
  • 使用 Setter 通常更好,因为您可以检查设置的值,而使用普通引用则不能保证调用者不会对数据做任何愚蠢的事情。

对于 setter/getter :

  • 通过拷贝返回似乎是一种浪费,因为大多数时候您不会修改返回的对象(对于设置映射),但是指针或引用确实意味着别名化的对象将存在足够长的时间,如果您不能保证的话重点是:按值(value)返回。同时复制允许避免暴露内部细节,例如,如果你突然切换到 std::wstring 因为你需要 UTF-8 中的一些设置......
  • 如果您需要绩效,那么您准备在这个部门做一些让步。但是,引用不允许您表示属性不存在(除非您有一些神奇的值),而指针使它变得容易(NULL 已经为您删除)。

关于C++ get 方法 - 按值或按引用返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2939165/

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