![]() |
1
3
一旦您明确表示,五的规则适用于所有其他特殊成员函数 声明 任何特殊的成员函数,而不仅仅是当您为其提供自定义定义时。将函数定义为已删除仍然很重要。 请注意,将函数定义为删除并不等于完全不声明该函数(无论是隐式还是显式)。定义为delete的函数仍然被声明,并正常参与重载解析。它的唯一含义是,如果重载解析会选择删除的函数,那么重载解析将被视为格式不正确。 删除复制构造函数时,该规则也应适用的原因是,删除复制构造函数不会阻止复制赋值运算符的隐式定义。
但是,如果您显式删除了复制构造函数,那么您的类型很可能也不应该在赋值时具有默认的复制语义。五的规则确保您不会忘记为复制赋值运算符声明正确的语义,如果您想要编译器默认值,可以通过将重载定义为
就目前而言,写作
是病态的,但是
将使用编译器生成的默认复制行为进行编译,如果删除了复制构造函数,这可能对您的类型是错误的。
此外,复制构造函数或复制赋值运算符应将其参数视为
|
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |