为什么copy-constructor参数为const?

unj*_*nj2 28 c++ constructor

 Vector(const Vector& other) // Copy constructor 
 {
    x = other.x;
    y = other.y;
Run Code Online (Sandbox Code Playgroud)

为什么参数是const?

Jer*_*fin 57

你已经得到了答案,提到确保ctor不能改变被复制的东西 - 而且他们是正确的,把const放在那里确实有这种效果.

但更重要的是,临时对象无法绑定到非const引用.复制文件必须引用const对象才能复制临时对象.

  • 而且不仅是临时对象 - 它还允许复制构造函数用于恰好标记为const的命名对象. (14认同)

Nav*_*een 20

因为你不打算修改othercopy ctor中的参数,因为它是const.

当你这样做时x = other.x,基本上意味着this->x = other.x.所以你this只是通过复制other变量中的值来修改对象.由于other变量在这里是只读的,因此它作为const-ref传递.

  • 这也是必要的,因为你希望能够将rvalues绑定到ctor的参数:`X x = f();`.对于非const引用,这是不可能的. (18认同)
  • 它被认为是"良好的防御性编程",它通过(a)告诉调用者他们不必担心传入的参数的变化,以及(b)告诉实现者他们不允许改变参数. (10认同)