我听取了香草萨特最近的谈话谁建议的理由来传递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可能会说这个?
可能重复:
在C++中通过值传递或通过常量引用传递是否更好?
在编写文件系统时我想到了这一点.
vector<string> getFiles(string path);
vector<string> getFiles(const string& path);
Run Code Online (Sandbox Code Playgroud)
什么更快?什么更优雅?
显然path永远不会改变getFiles方法.
额外奖励:我正在使用C++ 11.有没有办法移动语义会加速一切?