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

时间:2017-06-14 11:50:55

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

显式声明类特殊函数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{};

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

1 个答案:

答案 0 :(得分:9)

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

你可以在例如this class reference