显式默认构造函数做什么?
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;
};
- 这些函数等价于哪些构造函数体?
myclass<int> x;
是否在 0
处初始化整数?
- 对于
myclass<std::vector<int>> x;
,默认移动构造函数的作用是什么?它是否调用向量的移动构造函数?
它们不等同于任何函数体。这三种情况之间存在细微但显着的差异:= default
、允许隐式生成和最接近的等效函数体。
下面link更详细的解释:
- Defaulted default constructor and destructor
- Defaulted move constructor
我找不到关于复制构造函数的好消息link;然而,其他两个 link 中提到的类似注意事项将适用。
myclass<int> x;
不会将 value
设置为 0
。
默认的移动构造函数(如果你将它设为非 const 引用)移动每个可移动成员(尽管我认为有一种特殊情况,如果有一个不可移动的基 class,很奇怪事情发生了...)
考虑以下几点:
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;
,默认移动构造函数的作用是什么?它是否调用向量的移动构造函数?
它们不等同于任何函数体。这三种情况之间存在细微但显着的差异:= default
、允许隐式生成和最接近的等效函数体。
下面link更详细的解释:
- Defaulted default constructor and destructor
- Defaulted move constructor
我找不到关于复制构造函数的好消息link;然而,其他两个 link 中提到的类似注意事项将适用。
myclass<int> x;
不会将 value
设置为 0
。
默认的移动构造函数(如果你将它设为非 const 引用)移动每个可移动成员(尽管我认为有一种特殊情况,如果有一个不可移动的基 class,很奇怪事情发生了...)