传递Constd:String&作为参数的日子结束了吗?
我最近听了赫伯·萨特的一次演讲,他提出了放弃的理由std::vector和std::string通过const &基本上都不见了。他建议,现在最好编写如下这样的函数:
std::vector
std::string
const &
std::string do_something ( std::string inval ){ std::string return_val; // ... do stuff ... return return_val;}
我知道return_val将是函数返回点处的一个rvalue,因此可以使用Move语义返回,这非常便宜。然而,inval仍然比引用的大小大得多(引用通常是作为指针实现的)。这是因为std::string具有各种组件,包括指向堆的指针和成员。char[]用于短字符串优化。因此,在我看来,通过参考仍然是一个好主意。
return_val
inval
char[]
有人能解释赫伯为什么这么说吗?
相关分类