我听过Herb Sutter最近的一次演讲,他认为通过std::vector
和std::string
const &
的理由已经基本消失了。他建议现在最好编写如下这样的函数:
std::string do_something ( std::string inval )
{
std::string return_val;
// ... do stuff ...
return return_val;
}
我明白,return_val
将是函数返回点的右值,因此可以使用move语义返回,这非常便宜。然而,inval
仍然比引用(通常实现为指针)的大小大得多。这是因为std::string
具有各种组件,包括指向堆的指针和用于短字符串优化的成员char[]
。所以在我看来,通过引用传递仍然是一个好主意。
谁能解释一下赫伯为什么会这么说?