为什么复制构造函数参数为const?

Vector(const Vector& other) // Copy constructor { x = other.x; y = other.y; 

为什么参数是一个const?

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

更重要的是,临时对象不能绑定到非const引用。 复制ctor必须引用一个const对象才能复制临时对象。

因为你不会修改other参数,因为它是const。

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

传统的copy-ctor和朋友由于上述原因需要一个const&参数。 但是,您还应该查看移动语义和r值引用 (如果一切顺利,请成为C ++ 0x的一部分)来查看为什么以及何时使用不带const&参数的copy-ctors。 另一个需要考虑的地方是智能指针的实现,例如auto_ptr (它拥有所有权语义的转移),其中非常量参数是有用的。

为了不能改变other (偶然)?

当我们试图使用拷贝构造函数将一个对象复制到另一个对象时,我们需要保留原始对象(我们正在拷贝)的原始拷贝,所以在传递对象的时候我们使它保持不变,并且把它作为引用传递。

复制构造函数的思想是将other对象的内容复制到this对象中。 常量是在那里确保你不修改other对象。

它不特定于复制构造函数。 在任何函数中,如果不打算修改对象的内部状态,则对象将作为const传递。

 Vector(const Vector& other) { //Since other is const, only public data member and public methods which are `const` can be accessed. } 

例如,如果你想复制一个只有const引用的对象,它也可以派上用场

 ... const Vector& getPosition(); ... Vector* v = new Vector(getPosition()); 

如果不是Vector(const Vector& other) ,那么这个例子会产生一个语法错误。