为什么要在C ++中放入const(...)&

Igr*_*x33 6 c++ class

我想知道-为什么const (...)&在C ++中引入一个好主意?我在一些课程教程中找到了此代码。我了解到,const在将某些东西&传递给函数的同时,它使它们保持不变,并且无法更改。为什么两者都做?如果我无法更改某些内容,为什么还要将其传递给函数?

这是一个例子:

class CVector {
      public:
        int x,y;
        CVector () {};
        CVector (int a,int b) : x(a), y(b) {}
        CVector operator + (const CVector&);
    };

    CVector CVector::operator+ (const CVector& param) { //example 
      CVector temp;
      temp.x = x + param.x;
      temp.y = y + param.y;
      return temp;
    }
Run Code Online (Sandbox Code Playgroud)

CIs*_*ies 6

即使const阻止您更改参数的值,也最好发送对它的引用,而不是按值发送它,因为在大型对象中,按值发送它需要首先复制它,这是不必要的通过参考致电时

  • 另一方面,如果您无论如何都要在函数内复制该值(例如,因为您必须进行临时修改),那么您可能需要删除“const&”(示例[此处](https://stackoverflow.com /a/24543391/1485885))。 (3认同)
  • 同样,对于AFAIK,如果您使用的是C ++ 11,并且该参数恰好是右值,那么您可以从移动语义中受益,因此可以完全避免复制(如果使用`const&`加号,则不会发生这种情况)复印件)。 (2认同)