【发布时间】:2012-05-11 14:14:09
【问题描述】:
我的问题很简单:如果我有一些类 Man 并且我想定义返回人名的成员函数,我更喜欢以下两种变体中的哪一种?
第一:
string name();
第二:
void name(/* OUT */ string &name);
第一个变体有点低效,因为它会产生不必要的副本(局部变量 -> 返回值 -> 赋值左侧的变量)。
第二个变种看起来很有效,但写起来让我哭了
string name;
john.name(name);
而不是简单
string name(john.name());
那么,我应该更喜欢哪种变体?在效率和便利性/可读性之间进行适当的权衡是什么?
提前致谢。
【问题讨论】:
-
旁注,因为
name()看起来像一个查询,所以将其设为const:string name() const;。 -
@hmjd 为什么是第一个
const?返回的对象最终属于客户,他应该可以随意使用它。 -
@JamesKanze,这不是签名的一部分,而是我的评论,后面跟着一个':'。
-
如果只是一个简单的 getter 访问相应的成员变量,
const std::string&可能是一个更好的主意。 -
@hmjd 对不起,那么。在我使用的字体中, : 显示得不太好。