C++ C+中的默认构造函数+;

C++ C+中的默认构造函数+;,c++,constructor,C++,Constructor,如果我的类中有带参数的构造函数, 我们需要提供一个不做任何事情的构造函数,如: 1) 只是为了让编译器满意 现在,如果我的类有一个默认参数,如: 2) 在第二种情况下,调用A::()还是A::A(int=0)是不明确的,因此我们不能提供任何不做任何事情的构造函数。 因此,在这种情况下,即使编译器提供的隐式构造函数也会得到支持,这是真的吗 请提供一些说明/想法。如果您没有明确定义一个ctor,编译器只会生成一个默认ctor。因此,如果您定义了一个ctor,编译器将不会为类生成一个ctor。如果您没

如果我的类中有带参数的构造函数, 我们需要提供一个不做任何事情的构造函数,如:

1)

只是为了让编译器满意

现在,如果我的类有一个默认参数,如:

2)

在第二种情况下,调用A::()还是A::A(int=0)是不明确的,因此我们不能提供任何不做任何事情的构造函数。 因此,在这种情况下,即使编译器提供的隐式构造函数也会得到支持,这是真的吗


请提供一些说明/想法。

如果您没有明确定义一个ctor,编译器只会生成一个默认ctor。因此,如果您定义了一个ctor,编译器将不会为类生成一个ctor。

如果您没有显式定义一个ctor,编译器只会生成一个默认ctor。因此,如果定义了一个构造函数,编译器将不会为类生成一个构造函数。

一个没有参数的构造函数,或者一个所有参数都有默认值的构造函数,是默认构造函数

如果您提供了编译器,它将不会生成


如果默认构造函数对您的类型没有意义,那么您不必提供默认构造函数。当然,这禁止在需要默认构造函数的地方使用类,但这种使用可能也没有意义。

一个没有参数的构造函数,或者一个所有参数都有默认值的构造函数,是默认构造函数

如果您提供了编译器,它将不会生成


如果默认构造函数对您的类型没有意义,那么您不必提供默认构造函数。当然,这禁止在需要默认构造函数的地方使用类,但这种使用可能也没有意义。

如果需要显式禁用构造函数,可以将其设置为类的私有


请注意,编译器不应该抱怨您没有提供构造函数。在您提供一个(并且只有一个)构造函数的那一刻,它应该自动停止提供默认构造函数

如果您需要显式禁用构造函数的使用,您可以将其设置为类的私有构造函数


请注意,编译器不应该抱怨您没有提供构造函数。在您提供一个(并且只有一个)的那一刻,它应该自动停止提供默认构造函数

注意,您不需要指定零参数构造函数来“满足编译器”。编程从来都不是为了满足编译器!您不必有默认构造函数来满足编译器的要求。如果你要做一些需要默认构造函数的事情,比如
a
ab[10]
A*c=新的A[10]。没有要求类具有默认构造函数。我几分钟前读的那本书似乎有错误,它有这些词…以满足编译器…感谢您让我知道所有这些注意,您不需要指定零参数构造函数来“满足编译器”。编程从来都不是为了满足编译器!您不必有默认构造函数来满足编译器的要求。如果你要做一些需要默认构造函数的事情,比如
a
ab[10]
A*c=新的A[10]。没有要求类有默认构造函数。我几分钟前读的那本书似乎有错误,它有这些词…为了让编译器满意…感谢你让我知道所有这些,不管你的构造函数有多少个参数,默认与否,如果你指定了任何参数,编译器都不会生成一个(除了复制和移动ctor之外)。无论ctor有多少个参数(默认值与否),如果您指定任何参数(除了复制和移动ctor之外),编译器都不会生成一个参数。
class A
{
  A(){};  //To satisfy the compiler
  //some constructors with parameter
};
class A
{
//A(){} can't be used expilcilty or implicilty
A(int = 0);
};
A a;