可以删除(或默认)非特殊的c++成员函数吗?
Can non-special C++ member functions be deleted (or defaulted)?
= default
和= delete
在特殊成员(默认构造函数、析构函数、复制和移动)方面得到了很多关注。= default
和= delete
能否与其他功能配合使用?成员函数,自由函数和操作符等等?
我可以理解= default
可能不允许在特殊成员之外;因为它基本上是说使用编译器生成的默认。在编译器能够生成默认值之前,需要清楚地定义它。据我所知,只有特殊成员才有这些预定义的默认值。
= delete
;它的基本意思是声明了函数,但没有显式地定义实现。
-
= delete
可以与特殊成员以外的函数一起使用吗? - 它可以用于哪些函数类型(成员、非成员、操作符等)?
- 或者相反,在哪里(或何时)禁止使用
= delete
?它的使用有什么限制吗?
任何函数都可以声明为已删除(使用= delete
)。该标准没有施加任何限制。c++ 11[dcl.fct.def.delete]涵盖了这一点。它甚至给出了一个删除operator new
的例子。
1…显式默认的函数
- 是一个特殊的成员函数,
- 具有相同的声明函数类型(除了可能有不同的ref-qualifier ,并且在复制构造函数或复制赋值操作符的情况下,形参类型可以是"引用")非const
T
",其中T
是成员函数的类名)就好像它已经被隐式声明过,并且- 没有默认参数
在第一个要点中引用的"特殊成员函数"是(根据[special]§1):
- 默认构造函数
- 拷贝构造函数 <
- 转移构造函数/gh>
- 复制赋值操作符
- 移动赋值算子
- 析构函数
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 助记符和指向成员语法的指针
- 用于访问容器<T>数据成员的正确 API
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 嵌套在类中时无法设置成员数据
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 将函数类成员映射到类本身内部
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 将公共但非静态的成员函数与ALGLIB集成
- 多成员Constexpr结构初始化
- 我们可以访问一个不存在的联盟的成员吗