模板类型为基础时通过引用传递的成本

Vin*_*ent 4 c++ optimization pass-by-reference pass-by-value c++11

我一直听说确保最佳表现的良好做法是:

  • 按值传递基本类型(int,double...)
  • 通过const引用传递类

现在,在编译器下使用C++ 11和完全优化,当通过const引用传递基本类型时是否有开销?

进而,当Tint将以下功能:

template <typename T> inline void f(const T& x);
Run Code Online (Sandbox Code Playgroud)

慢于:

template <typename T> inline void f(const T x);
Run Code Online (Sandbox Code Playgroud)

Dav*_*eas 6

如果编译器真正内联代码(这对于简单模板很常见),则没有区别.当无法内联函数时,问题变得明显,并且调用了外联定义.

在这种情况下,传递引用可能涉及访问变量时的额外取消引用(至少第一次,可能多次)同时,如果参数是按值,编译器可以执行更积极的优化,因为它知道在当前函数之外无法访问/修改变量.