繁体   English   中英

可以删除(或默认)非特殊C ++成员函数吗?

[英]Can non-special C++ member functions be deleted (or defaulted)?

关于特殊成员(默认构造函数,析构函数,复制和移动), = default= delete已经收到了很多关注。 Can = default= delete可以与其他函数一起使用; 会员功能,免费功能和运营商等?

我可以理解,在特殊成员之外可能不允许使用= default ; 因为它基本上是说使用编译器生成的默认值 在编译器能够生成默认值之前,需要明确定义默认值。 据我所知,只有特殊成员才有这些预先定义的默认值。

怎么样= delete ; 它基本上是说声明了函数,但是实现没有明确定义

  • Can = delete可以用于特殊成员以外的功能吗?
  • 可以使用哪些功能类型(成员,非成员,运营商等)?
  • 或者相反,哪里(或何时) = delete禁止使用? 它的使用有任何限制吗?

任何函数都可以声明为已删除(使用= delete )。 该标准没有任何限制。 这由C ++ 11 [dcl.fct.def.delete]涵盖。 它甚至给出了一个删除的operator new的示例。

默认的功能,另一方面, 由[dcl.fct.def.default]局限于§1如下:

1 ...明确默认的功能应该

  • 是一个特殊的会员功能,
  • 具有相同的声明函数类型(可能不同的ref限定符除外,在复制构造函数或复制赋值运算符的情况下,参数类型可以是“引用非const T ”,其中T是成员函数的类)就像它已被隐式声明一样,并且
  • 没有默认参数。

第一个要点中引用的“特殊成员函数”是(根据[特殊]§1):

  • 默认构造函数
  • 复制构造函数
  • 移动构造函数
  • 复制赋值运算符
  • 移动赋值运算符
  • 析构函数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM