2017-02-25 101 views
0

学习C++上cppreference初始化我发现了以下(作为值初始化“因为C++ 11”):“没有默认构造函数”一类型

1)如果T是没有默认值构造一个类的类型或者使用用户提供或删除的默认构造函数,对象将被默认初始化; 2)如果T是一个具有既不是用户提供也不是删除的默认构造函数的类类型(也就是说,它可能是一个具有隐式定义或默认构造函数的类),则该对象是零初始化的然后如果它有一个不平凡的默认构造函数,它就会被默认初始化;

...

这意味着一个类类型可以有:

  • 没有;
  • 用户提供;
  • 删除;
  • 隐式定义;
  • 默认;

默认构造函数。

“no”默认构造函数是什么意思?类类型总是有一个至少隐式定义(或被删除)?

回答

1

“no”默认构造函数是什么意思?类类型总是有一个至少隐式定义(或被删除)?

如果有用户定义的构造函数,没有隐式定义的默认构造函数(没有参数)。

申报一个最简单的方法是使用default关键字:

class MyClass { 
public: 
    MyClass(int y); // <<< No default constructor generated 
    MyClass() = default; // <<< Force generation of default constructor 
}; 
0

看到这个答案的隐含默认的解释:https://stackoverflow.com/a/12340762/3616833

简单来说,一个构造函数是默认的,如果它可以不带参数地被调用。如果构造函数不是由用户提供的,而是声明/定义的,则隐含(已声明/定义)构造函数。

如果所有的构造函数都需要至少一个参数,那么仍然可以声明/定义没有默认构造函数的类。

default关键字创建默认的默认构造函数,因此不是OP问题的答案。

相关问题