考虑以下几点:
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;
不设置 value
至 0
.
默认的移动构造函数(如果你使它成为非常量引用)移动每个可移动成员(虽然我认为有一种特殊情况,如果有一个不可移动的基类,奇怪的事情会发生......)
关于c++ - 显式默认构造函数做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34007475/