我的问题很简单:如果我有一个类Man,并且我想定义一个返回人名的成员函数,下面两种变体中我应该选择哪一种?
第一种:
第一种变体有点低效,因为它会产生不必要的拷贝(局部变量 -> 返回值 -> 赋值左侧的变量)。
第二种变体看起来相当高效,但让我写起来感觉很痛苦。
那么,我应该选择哪个变体,效率和方便/可读性之间的适当权衡是什么?
第一种:
string name();
第二:
void name(/* OUT */ string &name);
第一种变体有点低效,因为它会产生不必要的拷贝(局部变量 -> 返回值 -> 赋值左侧的变量)。
第二种变体看起来相当高效,但让我写起来感觉很痛苦。
string name;
john.name(name);
而不是简单的
string name(john.name());
那么,我应该选择哪个变体,效率和方便/可读性之间的适当权衡是什么?
name()
看起来像一个查询函数,所以请将其更改为const
:string name() const;
。 - hmjdconst std::string&
可能是一个更好的选择。 - Christian Rau