为啥将类特殊功能显式声明为“默认” [重复]
Posted
技术标签:
【中文标题】为啥将类特殊功能显式声明为“默认” [重复]【英文标题】:Why explicitly declare classes special functions as "default" [duplicate]为什么将类特殊功能显式声明为“默认” [重复] 【发布时间】:2017-06-14 11:50:54 【问题描述】:显式声明类特殊函数默认有什么区别。
class Myclass
public:
Myclass() = default;
virtual ~Myclass() = default;
Myclass(MyClass&&) = default;
Myclass& operator=(MyClass&&) = default;
Myclass(const MyClass&) = default;
Myclass& operator=(const MyClass&) = default;
;
MyClass;
这两个声明有什么区别? 为什么要明确指定默认行为函数为默认值??
【问题讨论】:
class MyClass;
版本没有虚拟析构函数。
What is the difference between this 2 declarations?
哪两个声明?您似乎只包含了每个特殊成员函数的 1 个声明。
【参考方案1】:
因为在某些情况下编译器可能不会添加构造函数、析构函数或运算符,即使您可能需要编译器生成的默认值。然后通过使用显式的default
指示符,编译器无论如何都会这样做。
您可以在例如this class
reference.
【讨论】:
有时显式也可以增加清晰度,您表示默认生成的是选择而不是错误。以上是关于为啥将类特殊功能显式声明为“默认” [重复]的主要内容,如果未能解决你的问题,请参考以下文章
为啥使用默认的 React Google Maps 得到“TypeError:无法将类调用为函数”?
为啥显式允许默认构造函数和具有 2 个或更多(非默认)参数的构造函数?
默认构造函数,为啥我的类似乎有三个?当编译器将类视为结构时?