声明
隐式声明的移动分配运算符
如果没有为类提供用户定义的移动赋值运算符 type(struct,class或union),以下所有内容均为true:
没有用户声明的副本构造函数;
没有用户声明的移动构造函数;
没有用户声明的复制赋值运算符;
没有用户声明的析构函数;
使用用户声明的复制分配运算符仅表示
class_name& class_name :: operator =(class_name&&)
或任何 if let userDefaults = UserDefaults(suiteName: "group.com.example.myapp") {
let myFlag = userDefaults.bool(forKey: "myFlag")
}
已定义?
示例:
operator=()
这是否符合implitely声明的移动assigmnent运营商的条件?
隐式声明的移动构造函数也是如此。
答案 0 :(得分:2)
请注意,它表示"用户声明的复制赋值运算符" (强调我的)。并非每个赋值运算符都是复制赋值运算符。
对于课程X
, copy 赋值运算符定义为operator=
,其中包含X
,X&
,{{类型的参数1}},const X&
或volatile X&
。因此,const volatile X&
不是副本赋值运算符,因此不会影响移动(或复制)赋值运算符的隐式声明。