2

可能重复:
在 C++ 中通过值传递还是通过常量引用传递更好?

我在编写文件系统时考虑了这一点。

vector<string> getFiles(string path);
vector<string> getFiles(const string& path);

哪个更快?哪个更优雅?

显然path永远不会改变getFiles方法。

奖励:我使用的是 C++11。有没有办法移动语义可以加快一切?

4

3 回答 3

5

黄金法则:

“默认情况下总是通过 const 引用传递。”

这应该是您传递函数参数时的默认选择。您根据情况需要选择其他选项。

  • 对于自定义类,它总是更有效。
  • 它对用户来说更直观。
于 2013-01-12T17:44:56.030 回答
4

在您的情况下,规范的答案是通过 传递参数const&,这既是出于性能原因(保证避免复制字符串),也是因为您记录了意图。前者仅在您分析了代码并确定传递字符串是瓶颈时才重要 - 如果不是,您主要关注“最佳实践”而不是产生很大的性能差异。

但是对我来说,如果我查看您的函数的签名,则第二个明确指出“我只会读取您的参数而不对它做任何事情”,而第一个则几乎表明您将对参数做一些事情,即使您在处理参数副本时所做的更改对外部不可见。

还有一个额外的好处是,通过 const 引用传递参数可以避免内存分配,如果您在没有无限内存(即所有内存)的系统上工作,这很方便。

于 2013-01-12T17:47:51.283 回答
1

使用 by-value 参数可能会更好。看到这篇文章,想要速度吗?Pass by Value,详细原因。基本上,您在调用函数的方式上为调用者和/或编译器提供了更大的灵活性。Usingconst&强制执行过去是 C++98 的最佳实践,但可能与 C++11 中的移动语义相悖。

于 2013-01-12T17:47:30.820 回答