明确默认的构造函数有什么作用?

时间:2015-11-30 20:32:34

标签: c++ c++11 constructor default default-constructor

请考虑以下事项:

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;
};
  • 这些函数的构造函数体是等价的吗?
  • myclass<int> x;是否0初始化整数?
  • 对于myclass<std::vector<int>> x;默认移动构造函数的作用是什么?它是否称为向量的移动构造函数?

1 个答案:

答案 0 :(得分:5)

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

以下链接更详细地解释:

我无法找到关于复制构造函数的良好链接;但是,其他两个链接中提到的类似注意事项将适用。

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

默认的move-constructor(如果你使它成为非const引用)移动每个可移动成员(虽然我认为有一个特殊情况,如果有一个不可移动的基类,奇怪的事情发生......)