通过学习cppreference上的C++初始化,我发现了以下内容(作为值初始化“自C++11"):
1)如果T是一个没有默认构造函数的类类型,或者是用户提供或删除的默认构造函数,则该对象是默认初始化的;
2)如果T是一个类类型,它的默认构造函数既不是用户提供的,也不是删除的(也就是说,它可以是一个具有隐式定义的或默认的默认构造函数的类),则该对象是零初始化的,如果它有一个非平凡的默认构造函数,则为默认初始化;
..。
这意味着类类型可以具有:
默认构造函数
“没有”默认构造函数是什么意思?类类型不是总是至少有一个隐式定义(或者被删除)吗?
发布于 2017-02-25 04:47:55
“没有”默认构造函数是什么意思?类类型不是总是至少有一个隐式定义(或者被删除)吗?
如果存在用户定义的构造函数,则不存在隐含定义的默认构造函数(没有参数)。
最简单的声明方法是使用default关键字:
class MyClass {
public:
MyClass(int y); // <<< No default constructor generated
MyClass() = default; // <<< Force generation of default constructor
};发布于 2017-02-25 04:51:22
有关隐式默认值的解释,请参见此答案:https://stackoverflow.com/a/12340762/3616833
简单地说,如果可以在没有参数的情况下调用构造函数,则构造函数是默认的。如果构造函数不是用户提供的,而是声明/定义的,则构造函数是隐式的(ly声明/定义)。
如果类的所有构造函数至少需要一个参数,则仍然可以使用默认构造函数声明/定义类。
default关键字创建一个默认的默认构造函数,因此不是OP问题的答案。
https://stackoverflow.com/questions/42452030
复制相似问题