gpt4 book ai didi

c++ - 为什么 C++ 复制构造函数必须使用 const 对象?

转载 作者:IT老高 更新时间:2023-10-28 21:59:35 40 4
gpt4 key购买 nike

我明白当我们定义一个类的时候,类的拷贝构造函数是必要的,因为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/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com