通过值或const引用?

use*_*020 7 c++ parameter-passing

一组很好的规则来确定是否通过值或const引用传递

  • 如果函数打算将参数更改为副作用,请使用非const引用.
  • 如果函数不修改其参数且参数是基本类型,则按值取值.
  • 否则通过const引用获取它,除非在下列情况下:如果函数需要复制const引用,请按值取值.

对于构造函数如下,如何确定它?

class A
{
public:
    A(string str) : mStr(str) {} // here which is better, 
                                 // pass by value or const reference?

    void setString(string str)  { mStr = str; } // how about here?

private:
    string mStr;
};
Run Code Online (Sandbox Code Playgroud)

Jam*_*nze 3

您网站上的文章对于软件工程来说不是一个很好的参考。(它也可能已经过时了,因为它谈论的是移动语义并且是 2003 年的。)

一般规则很简单:通过 const 引用传递类类型,通过值传递其他类型。有明确的例外:为了与标准库的约定保持一致,通常也按值传递迭代器和函数对象。

其他任何事情都是优化,在分析器要求您必须这样做之前不应进行。