【问题标题】: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 个声明。

标签: c++ class c++11 default


【解决方案1】:

因为在某些情况下编译器可能不会添加构造函数、析构函数或运算符,即使您可能需要编译器生成的默认值。然后通过使用显式的default 指示符,编译器无论如何都会这样做。

您可以在例如this class reference.

【讨论】:

  • 有时显式也可以增加清晰度,您表示默认生成的是选择而不是错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-25
  • 2015-01-21
  • 1970-01-01
  • 1970-01-01
  • 2011-01-23
  • 1970-01-01
  • 2011-06-03
相关资源
最近更新 更多