很多关注已收到= default,并= delete针对特殊的成员(默认构造函数,析构函数,复制和移动).可以= default和= delete其他功能一起使用; 会员功能,免费功能和运营商等?
我可以理解,= default在特殊成员之外可能不允许这样做; 因为它基本上是说使用编译器生成的默认值.在编译器能够生成默认值之前,需要明确定义默认值.据我所知,只有特殊成员才有这些预定义的默认值.
那怎么样= delete; 它基本上是说声明了函数,但是实现没有明确定义.
= delete用于特殊成员以外的功能吗?= delete禁止使用何处(或何时)?它的使用有任何限制吗?Rei*_*ica 11
任何函数都可以声明为已删除(使用= delete).该标准没有任何限制.这由C++ 11 [dcl.fct.def.delete]涵盖.它甚至给出了一个删除的例子operator new.
默认的功能,另一方面,是由[dcl.fct.def.default]局限于§1如下:
1 ...明确默认的功能应该
- 是一个特殊的会员功能,
- 具有相同的声明函数类型(可能不同的ref限定符除外,在复制构造函数或复制赋值运算符的情况下,参数类型可能是"引用非const
T",其中T是成员函数的名称)类似于它已被隐式声明,并且- 没有默认参数.
第一个要点中引用的"特殊成员函数"是(根据[特殊]§1):