假设我有一个接受 T
类型参数的函数。
它不会改变它,所以我可以选择通过 const 引用 const T&
或值 T
传递它:
void foo(T t){ ... }
void foo(const T& t){ ... }
在通过 const 引用传递比通过值传递便宜之前,T
应该变成多大的经验法则?例如,假设我知道 sizeof(T) == 24
。我应该使用 const 引用还是值?
我假设 T
的复制构造函数是微不足道的。否则,问题的答案当然取决于复制构造函数的复杂性。
我已经寻找过类似的问题,偶然发现了这个问题:
template pass by value or const reference or...?
但是,接受的答案( https://stackoverflow.com/a/4876937/1408611 ) 没有说明任何细节,它只是说明:
If you expect T always to be a numeric type or a type that is very cheap to copy, then you can take the argument by value.
所以它并没有解决我的问题,而是改写了它:一个类型必须有多小才能“复制起来非常便宜”?
最佳答案
如果您有理由怀疑会有值得的性能提升,请使用经验法则将其剔除并衡量。您引用的建议的目的是您不会无缘无故地复制大量数据,但也不要通过将所有内容都作为引用来危害优化。如果某些东西处于“复制明显便宜”和“复制明显昂贵”之间的边缘,那么您可以负担得起任何一种选择。如果您必须让您做出决定,请掷硬币。
如果一个类型没有时髦的复制构造函数并且它的 sizeof
很小,那么它的复制成本很低。 “小”没有最佳的硬数字,甚至在每个平台的基础上都没有,因为它在很大程度上取决于调用代码和函数本身。随你的直觉走吧。一、二、三个字很小。十个,谁知道呢。一个 4x4 的矩阵并不小。
关于c++ - 当按值传递比通过 const 引用传递时的经验法则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26387569/