显式默认构造函数的作用
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;
,默认的move构造函数做什么?它会调用向量的move构造函数吗
它们不等价于任何函数体。三种情况之间存在微小但显著的差异:允许隐式生成的= default
和最近的等效函数体。
以下链接更详细地解释:
- 默认的默认构造函数和析构函数
- 默认的移动构造函数
我找不到关于复制构造函数的好链接;然而,其他两个链接中提到的类似考虑将适用。
CCD_ 5不将CCD_ 6设置为CCD_。
默认的move构造函数(如果您将其设为非常量引用)移动每个可移动成员(尽管我认为有一种特殊情况,如果存在不可移动的基类,则会发生奇怪的事情…)
相关文章:
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- 通过构造函数创建一些值并尝试添加到文档中使用 rapidjson 不起作用
- 在构造函数中输入对象时C++类成员作用域
- 类和构造函数中的函数根本不起作用,并且不返回任何错误
- 为什么必须使用'*p=a',而使用'p=&a'在构造函数中不起作用
- 模板 ctor 类型推导不起作用(没有匹配的构造函数用于初始化 ...)与函数<>参数
- 将复制构造函数设置为默认值在继承自 QObject 时不起作用
- 子类化 STL 容器:范围构造函数不起作用
- 带有此指针的模板类多重继承构造函数不起作用?
- 如果构造函数被显式默认或删除,为什么聚合初始化自 C++20 以来不再起作用
- VS为我提供了对构造函数的另一个解决方案,但我想知道为什么我的工作不起作用
- 模板参数在具有相同数据类型的单个类型名的构造函数中不起作用
- 隐式用户定义的转换不起作用,因为在编译C 时无法识别运算符和转换构造函数
- 当不存在这样的构造函数时,将类传递给构造函数.它为什么起作用
- C++:在没有 lvalue 的情况下调用时复制构造函数不起作用
- 调用 setVisible(false) 在 QWidget 的构造函数中不起作用
- 模板堆栈类的复制构造函数中的 pop() 和 push() 不起作用
- 为什么我的右值复制构造函数不起作用
- 如果所述结构具有构造函数,则带有 new[] 的结构数组似乎不起作用
- 矩阵模板类复制构造函数不起作用?