为啥将类特殊功能显式声明为“默认” [重复]

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 个或更多(非默认)参数的构造函数?

默认构造函数,为啥我的类似乎有三个?当编译器将类视为结构时?

使列默认为 NULL 显式

为啥 std::in_place_t 的构造函数默认且显式?

C++要点总结