当将参数传递给将在短时间内被调用数百万次的函数和方法时,传递所述参数的开销开始显现。
void foo(const SomeType& st) { ... }
对于 std::string、std::vector 等类型,规则是通过引用传递,这样就不会出现无意义的复制。然而,在处理诸如双打、整数等 POD 时,情况就完全不同了。
关于性能,如果函数/方法不需要改变参数,那么在决定是否应该通过引用、常量引用或复制传递时,常见的“需要注意的事项”是什么?
void foo1(SomeType& st)
{
...
}
void foo2(const SomeType& st)
{
...
}
void foo3(SomeType st)
{
...
}
void foo4(SomeType* st)
{
...
}
- 是否应该始终通过副本传递 int/unsigned int?
- 是否应该仅在 64 位或更高的目标上通过副本传递双精度?
- 如果函数可以内联 - 参数的传递方式是否重要?
- 通过 ref/const ref 传入时,别名如何影响问题?
- 在什么情况下,参数的显式副本对堆栈有益?
注意:这不是关于 const 正确性的问题。还寻找与 32/64 位平台上的 gcc 和 msvc 相关的答案。
一些可能相关的问答: