我听了Herb Sutter最近的一次演讲,他建议传递std::vector
和std::string
的原因大多数已经消失。他建议编写以下函数现在更可取:
std::string do_something ( std::string inval )
{
std::string return_val;
// ... do stuff ...
return return_val;
}
我明白在函数返回时,return_val
将成为一个右值,因此可以使用移动语义来返回,而移动语义非常廉价。但是,inval
仍然比引用的大小要大得多(引用通常实现为指针)。这是因为具有各种组件,包括堆中的指针和成员char[]
以进行短字符串优化。因此,按引用传递仍然是一个好主意。有人能解释一下Herb为什么会这样说吗?
std::string_view
,就再也没有一个好的理由传递字符串的引用了。但是考虑到你提出这个问题的时间,这可能不是你想要的答案! - undefined