为什么显式地将类特殊函数声明为"默认"

Edu*_*yan 4 c++ default class c++11

明确声明类特殊函数default之间有什么区别.

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{};
Run Code Online (Sandbox Code Playgroud)

这2个声明有什么区别?为什么明确指定默认的行为函数为默认值?

Som*_*ude 9

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

您可以在class参考中找到更多信息.

  • 有时候显而易见可以增加清晰度,你发出默认生成的信息是选择而不是错误. (4认同)