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

Vin*_*ent 4 c++ constructor default default-constructor c++11

考虑以下:

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

M.M*_*M.M 5

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

以下链接更详细地解释:

我找不到关于copy-constructor的好链接; 但是,其他两个链接中提到的类似考虑将适用.


myclass<int> x;不设置value0.

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

  • @Vincent是的我确定.编译器警告无关紧要.尝试输出未初始化的变量会导致未定义的行为,您可能会看到任何内容.参见C++ 14的[dcl.init]/12 (2认同)