默认复制构造函数和赋值运算符

Default copy constructor and assignment operator

提问人:Fabio 提问时间:7/9/2022 最后编辑:Yakk - Adam NevraumontFabio 更新时间:7/14/2022 访问量:85

问:

如果在我的类的元素中我还有一个常量数据成员,那么复制构造函数和赋值运算符的行为如何? 我认为,但我不确定,提供了复制构造函数(在大多数情况下),而没有提供赋值运算符(与正常情况不同),所以如果我想使用它,我必须实现它(当然不分配常量数据成员)

C++ C++11 复制构造函数 值运算符

评论

0赞 Igor Tandetnik 7/9/2022
const 成员可以愉快地进行复制构造。粗略地说,成员常量在构造函数的左大括号处开始强制执行,但在初始值设定项列表中则不强制执行(甚至 const 成员也需要初始化为某个值)。赋值运算符根本不会被隐式声明。

答:

3赞 Yakk - Adam Nevraumont 7/14/2022 #1
struct foo {
  int const x;
};

foo f0{3}; // legal
foo f1 = f0; // legal, copy-construction

foo make_foo(int y) { return {y}; } // legal, direct-initialization

foo f2 = make_foo(3); // legal, elision and/or move-construction

f2 = f1; // illegal, copy-assignment
f2 = make_foo(3); // illegal, move-assignment

施工和分配是不同的操作。 并不意味着总是分配。=

您可以构造子对象;您不能分配给他们。然后,此属性应用于对象本身自动编写的特殊成员函数。const