在cppreference上学习C ++初始化我发现了以下内容(作为值初始化“自C ++ 11以来”):
1)如果T是没有默认构造函数的类类型,或者是用户提供或删除的默认构造函数,则该对象是默认初始化的;
2)如果T是具有默认构造函数的类类型,该构造函数既不是用户提供也不是删除(也就是说,它可能是具有隐式定义或默认默认构造函数的类),该对象是零初始化的并且如果它有一个非平凡的默认构造函数,则默认初始化;
...
这意味着类类型可以包含:
默认构造函数。
“no”默认构造函数是什么意思?类类型是否总是至少有一个隐式定义(或被删除)?
答案 0 :(得分:2)
“no”默认构造函数是什么意思?类类型是否总是至少有一个隐式定义(或被删除)?
如果有用户定义的构造函数,则没有隐含定义的默认构造函数(没有参数)。
声明一个的最简单方法是使用default
关键字:
class MyClass {
public:
MyClass(int y); // <<< No default constructor generated
MyClass() = default; // <<< Force generation of default constructor
};
答案 1 :(得分:0)
有关隐式默认值的解释,请参阅此答案:https://stackoverflow.com/a/12340762/3616833
简单来说,如果构造函数可以在没有参数的情况下调用,则它是默认的。如果构造函数不是由用户提供但是声明/定义,则构造函数是隐式的(声明/定义)。
如果所有构造函数都需要至少一个参数,则仍然可以声明/定义一个没有默认构造函数的类。
default关键字创建一个默认的默认构造函数,因此不是OP问题的答案。