C get方法 – 按值或按引用返回

C get方法 – 按值或按引用返回,第1张

概述我提出了一个非常简单的问题,但遗憾的是我自己无法找到答案. 假设我有一些保存设置的数据结构,就像设置图一样. 我有一个GetValue(const std :: string& name)方法,它返回相应的值. 现在我想弄明白 – 什么样的回报价值方法会更好.显而易见的意思是让我的方法表现得像 std::string GetValue(const std::string& name) const 我提出了一个非常简单的问题,但遗憾的是我自己无法找到答案.

假设我有一些保存设置的数据结构,就像设置图一样.
我有一个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;// orconst 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通常更好,因为您可以检查所设置的值,而使用普通引用时,您无法保证调用者不会对数据执行任何愚蠢的 *** 作.

对于吸气剂:

>通过复制返回似乎是浪费,因为大多数时候你不会修改返回的对象(对于设置图),但是指针或引用确实意味着对象别名将活得足够长,如果你不能保证它那么点没有实际意义:按价值回报.另外复制允许避免暴露内部细节,例如,如果您突然切换到std :: wstring,因为您需要UTF-8中的某些设置…>如果你需要表现,那么你准备在这个部门做一些让步.但是,引用不允许您发出缺少属性的信号(除非您有一些魔术值),而指针使其变得容易(NulL已经为您剪掉).

总结

以上是内存溢出为你收集整理的C get方法 – 按值或按引用返回全部内容,希望文章能够帮你解决C get方法 – 按值或按引用返回所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1237836.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存