显式默认构造函数做什么?

What do explicitly-defaulted constructors do?

考虑以下几点:

template <class T>
struct myclass
{
    using value_type = T;
    constexpr myclass() = default;
    constexpr myclass(const myclass& other) = default;
    constexpr myclass(const myclass&& other) = default;
    T value;
};

它们不等同于任何函数体。这三种情况之间存在细微但显着的差异:= default、允许隐式生成和最接近的等效函数体。

下面link更详细的解释:

  • Defaulted default constructor and destructor
  • Defaulted move constructor

我找不到关于复制构造函数的好消息link;然而,其他两个 link 中提到的类似注意事项将适用。


myclass<int> x; 不会将 value 设置为 0

默认的移动构造函数(如果你将它设为非 const 引用)移动每个可移动成员(尽管我认为有一种特殊情况,如果有一个不可移动的基 class,很奇怪事情发生了...)