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

C++ 为什么默认参数构造函数被称为默认构造函数,c++,constructor,C++,Constructor,为什么此默认参数构造函数是默认构造函数。为什么不称之为参数化构造函数或默认参数化构造函数,因为即使调用此构造函数时没有参数,它也包含两个参数??是否有任何特定的原因,或者仅仅是因为标准这么说。根据定义,默认构造函数是一个可以在没有参数的情况下调用的构造函数。您的cleary符合该定义,因为两个参数都有默认值 我想说,“为什么”是因为C++标准这么说。要调用的构造函数的选择是通过基于参数数量和类型的重载解析来完成的,就像其他函数一样。根据定义,默认构造函数是可以在不带参数的情况下调用的构造函数。您

为什么此默认参数构造函数是默认构造函数。为什么不称之为参数化构造函数或默认参数化构造函数,因为即使调用此构造函数时没有参数,它也包含两个参数??是否有任何特定的原因,或者仅仅是因为标准这么说。

根据定义,默认构造函数是一个可以在没有参数的情况下调用的构造函数。您的cleary符合该定义,因为两个参数都有默认值


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

根据定义,默认构造函数是可以在不带参数的情况下调用的构造函数。您的cleary符合该定义,因为两个参数都有默认值


我想说,“为什么”是因为C++标准这么说。与其他函数一样,通过基于参数数量和类型的重载解析来选择要调用的构造函数。

构造函数重载功能允许编译器根据传递的参数推断要调用的构造函数。 默认构造函数只是解析为无参数的构造函数,如中所示

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
}


同样,由于参数重载,每个集合只能解析一个构造函数。因此,如果所有参数都有默认值=>则可以调用“A()”=>它是默认构造函数。

构造函数重载功能允许编译器根据传递的参数推断要调用的构造函数。 默认构造函数只是解析为无参数的构造函数,如中所示

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
}

同样,由于参数重载,每个集合只能解析一个构造函数。因此,如果所有参数都有默认值=>则可以调用“A()”=>它是默认构造函数

C++11§12.1构造函数 类X的默认构造函数是类X的构造函数,无需参数即可调用

这是默认构造函数的定义。为其所有参数提供默认参数的构造函数可以在没有参数的情况下调用,因此符合定义

C++11§12.1构造函数 类X的默认构造函数是类X的构造函数,无需参数即可调用



这是默认构造函数的定义。为其所有参数提供默认参数的构造函数可以在没有参数的情况下调用,根据C++标准,默认构造函数是可以被调用的,没有参数。这也是你的原因。

< P>根据C++标准,默认构造函数是可以被调用的无参数的构造函数。这也是你的原因。

“为什么它不被称为参数化构造函数?”-它是。但它也是一个默认构造函数,因为它可以在没有(显式)参数的情况下被调用。为什么不称它为默认参数化构造函数???@Tejendra:如果你想这样称它,就称它为默认参数化构造函数。标准称它为所谓的。为什么不称它为默认参数化构造函数??“-是的,你可以这样称呼它,因为它就是这样。您似乎认为,作为默认构造函数,除了默认构造函数之外,您不能调用它。事实并非如此。“为什么它不被称为参数化构造函数?”-是的。但它也是一个默认构造函数,因为它可以在没有(显式)参数的情况下调用。为什么不调用它呢?默认参数化构造函数???@Tejendra:如果你想这样调用它,就调用它。标准称之为“为什么不称之为默认参数化构造函数?”——是的,你可以这样称呼它,因为这就是它。您似乎认为,作为默认构造函数,除了默认构造函数之外,您不能调用它。事实并非如此。请注意,您编写的两个声明具有不同的语义。请注意,您编写的两个声明具有不同的语义。我已经知道这件事。但您能否详细说明为什么部分??只是因为标准上这么说吗?@Tejendra很抱歉让你失望,但是是的,因为标准上这么说。它可以在需要默认构造函数的地方使用。@Tejendra如果是其他方法,你会如何解决歧义?我已经知道这件事了。但是你能详细说明为什么吗??只是因为标准上这么说吗?@Tejendra很抱歉让你失望,但是是的,因为标准上这么说。它可以在需要默认构造函数的地方使用。@Tejendra如果是其他方式,您将如何解决歧义?
A a=A();