我明白当我们定义一个类的时候,类的拷贝构造函数是必要的,因为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,则要复制的对象在此过程中不会更改其内容。但是,我确实注意到有些人仍然使用第二个实现而不是第一个。是否有任何理由首选第二种实现?
最佳答案
从逻辑上讲,修改一个你只想复制的对象应该没有意义,尽管有时它可能有一些意义,比如你想存储这个次数的情况对象已被复制。但这可以与存储此信息的
mutable
成员变量一起使用,甚至可以针对 const 对象进行修改(第二点将证明这种方法的合理性)您希望能够创建 const 对象的拷贝。但是,如果您没有使用 const 限定符传递参数,则无法创建 const 对象的拷贝...
你不能从临时引用创建拷贝,因为临时对象是右值,不能绑定(bind)到非常量引用。更详细的解释,我建议Herb Sutter's article on the matter
关于c++ - 为什么 C++ 复制构造函数必须使用 const 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16956693/