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

标签 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;默认的移动构造函数是做什么的?它是否调用 vector 的移动构造函数?

最佳答案

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

以下链接有更详细的解释:

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


myclass<int> x;不设置 value0 .

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

关于c++ - 显式默认构造函数做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34007475/

相关文章:

c++ - 为什么 std::hash 是结构而不是函数?

c++ - 引用成员必须是常量?

c++ - 为什么在我没有传递类的实例时调用复制构造函数?

C++读取文件循环搞砸了

c++ - 复制/修改 STL 容器的拷贝是线程安全的吗?

c++ - gcc arm 中的 strncpy 替换

c++ - 为什么我不能用 const_iterator 调用模板基类构造函数?

c++ - 重载 + 运算符的继承

c++ - 缓存友好性 std::list 与 std::vector

java - 抽象类和构造函数问题以及这个 UML 图