为什么默认参数构造函数被称为默认构造函数

时间:2014-04-16 11:03:05

标签: c++ constructor

Class A {
public:
       A(int i = 0, int k = 0) {} // default constructor WHY ??
       ~A() {}
};
int main()
{
  A a; // This creates object using defined default 
       // constructor but the constructor still has two arguments
  A b(1,2); // Called as parametrized one
}

为什么这个默认参数构造函数是默认构造函数。为什么它不被称为参数化构造函数或默认参数化构造函数,因为即使这个构造函数被调用而没有参数,它确实包含两个参数?是否有任何具体原因或仅仅因为标准是这样说的。

4 个答案:

答案 0 :(得分:8)

  

C ++11§12.1构造函数

     

类X的默认构造函数是类X的构造函数,可以不带参数调用。

这是默认构造函数的定义。为所有参数提供默认参数的构造函数可以不带参数调用,因此符合定义。

答案 1 :(得分:5)

根据定义,默认构造函数是不带参数的可以调用的构造函数。你的清晰适合那个定义,因为两个参数都有默认值。

我认为,仅仅因为C ++标准这样说,“为什么”更为重要。要调用的构造函数的选择是通过基于参数的数量和类型的重载决策来完成的,就像其他函数一样。

答案 2 :(得分:1)

构造函数重载的特性允许编译器根据传递的参数推断要调用的构造函数。 默认构造函数只是在没有参数的情况下解析的构造函数,如

A a;

A a=A();

再次由于参数重载,每个集合只能解析一个构造函数。因此,如果所有参数都具有默认值=>可以称'A()'=>它是默认构造函数。

答案 3 :(得分:1)

根据c ++标准,默认构造函数是可以不带参数调用的构造函数。这也是你质疑的原因。