猿问

请问传递Constd:String&作为参数的日子结束了吗?

传递Constd:String&作为参数的日子结束了吗?

我最近听了赫伯·萨特的一次演讲,他提出了放弃的理由std::vectorstd::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[]用于短字符串优化。因此,在我看来,通过参考仍然是一个好主意。

有人能解释赫伯为什么这么说吗?


江户川乱折腾
浏览 396回答 3
3回答
随时随地看视频慕课网APP
我要回答