我听取了香草萨特最近的谈话谁建议的理由来传递std::vector
和std::string
利用const &
在很大程度上消失了.他建议现在更好地编写如下函数:
std::string do_something ( std::string inval )
{
std::string return_val;
// ... do stuff ...
return return_val;
}
Run Code Online (Sandbox Code Playgroud)
我理解return_val
在函数返回时将是一个rvalue,因此可以使用非常便宜的移动语义返回.但是,inval
仍然远大于引用的大小(通常实现为指针).这是因为a std::string
具有各种组件,包括指向堆的指针和char[]
用于短字符串优化的成员.所以在我看来,通过引用传递仍然是一个好主意.
谁能解释为什么Herb可能会说这个?