缺省构造函数 (仅限 C + +)

缺省构造函数 是没有参数的构造函数,或者如果它具有参数,那么 所有 参数都具有缺省值。

如果类 A 不存在用户定义的构造函数并且需要一个构造函数,那么编译器将隐式 声明 缺省无参数构造函数 A::A()。 此构造函数是其类的内联公共成员。 当编译器使用此构造函数来创建类型为 A的对象时,编译器将隐式 定义 A::A() 。 构造函数将没有构造函数初始化程序和空主体。

编译器首先隐式定义类 A 的基类和非静态数据成员的隐式声明构造函数,然后再定义 A的隐式声明构造函数。 没有为具有任何常量或引用类型成员的类创建缺省构造函数。

编译器首先隐式定义一个类的基类和非静态数据成员的隐式声明 ""或显式缺省构造函数A在定义隐式声明的 ""或显式缺省构造函数之前A。没有为具有任何常量或引用类型成员的类创建缺省构造函数。

如果满足以下所有条件,那么类 A 的构造函数为 tri次要 :

  • 它是隐式定义的 ""或显式缺省值
  • A 没有虚拟函数,也没有虚拟基类
  • A 的所有直接基类都具有微不足道的构造函数
  • A 的所有非静态数据成员的类都具有琐碎构造函数

如果以上任何一项为 false ,那么构造函数为 nontri生活

联合成员不能是具有非平凡构造函数的类类型。

与所有函数一样,构造函数可以具有缺省自变量。 它们用于初始化成员对象。 如果提供了缺省值,那么可以在构造函数的表达式列表中省略尾部参数。 请注意,如果构造函数具有任何没有缺省值的自变量,那么它不是缺省构造函数。

A副本构造函数 是其第一个参数的类型为 A&const A&volatile A&const volatile A&的构造函数。 副本构造函数用于从同一类类型的另一类对象生成一个类对象的副本。 不能将副本构造函数与其类类型相同的自变量一起使用; 必须使用引用。 您可以为副本构造函数提供其他参数,只要它们都具有缺省参数。 如果某个类不存在用户定义的副本构造函数并且需要一个副本构造函数,那么编译器将隐式地为该类创建具有公共访问权的副本构造函数。 如果某个类的任何成员或基类具有不可访问的副本构造函数,那么不会为该类创建副本构造函数。

以下代码片段显示了具有构造函数,缺省构造函数和副本构造函数的两个类:
class X {
public:

  // default constructor, no arguments
  X();

  // constructor
  X(int, int , int = 0);

  // copy constructor
  X(const X&);

  // error, incorrect argument type
  X(X);
};

class Y {
public:

  // default constructor with one
  // default argument
  Y( int = 0);

  // default argument
  // copy constructor
  Y(const Y&, int = 0);
};

"" 注: 可以将缺省构造函数声明为显式缺省函数或已删除函数。 有关更多信息,请参阅 显式缺省函数 (C++11)已删除函数 (C++11)