我理解当我们定义一个类时,根据C++编程中的三法则(Rule of three),类的复制构造函数是必需的。我还注意到复制构造函数的参数通常为const
,如下面的代码所示:
class ABC {
public:
int a;
int b;
ABC(const ABC &other)
{
a = other.a;
b = other.b;
}
}
我的问题是,如果拷贝构造函数的参数不是const会发生什么:
class ABC
{
public:
int a;
int b;
ABC(ABC &other)
{
a = other.a;
b = other.b;
}
}
我知道,如果复制构造函数的参数是const,那么第二个实现可能会失败。此外,如果复制构造函数的参数是const,那么在复制过程中被复制的对象不会改变其内容。但是,我注意到有些人仍然使用第二种实现而不是第一种。有没有任何原因使第二种实现更受欢迎?
ABC B(A)
中修改A
?这样做意义不大且行为相当不直观。 - juanchopanza&other
的方法,这些方法本身没有声明为“const”。希望这样做的方式不会改变&other
。 - flaschenpostconst
。 - celtschk