C++ 中的默认构造函数

发布于 2024-11-06 08:38:32 字数 500 浏览 0 评论 0原文

如果我的类中有带有参数的构造函数, 我们需要提供一个什么都不做的构造函数,例如:

1)

class A
{
  A(){};  //To satisfy the compiler
  //some constructors with parameter
};

只是为了满足编译器的要求。

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

2)

class A
{
//A(){} can't be used expilcilty or implicilty
A(int = 0);
};
A a;

那么调用 A::() 还是 A::A(int = 0) 就会产生歧义,因此我们无法提供任何操作- 第二种情况下没有构造函数。 那么,在这种情况下,甚至编译器提供的隐式构造函数也会受到抑制,这是真的吗?

请提供一些澄清/想法。

if i have constructors with parameters in my class,
we need to provide a do-nothing constructor like :

1)

class A
{
  A(){};  //To satisfy the compiler
  //some constructors with parameter
};

just to satisfy the compiler.

Now if my class has a default parameter like :

2)

class A
{
//A(){} can't be used expilcilty or implicilty
A(int = 0);
};
A a;

There is going to be an ambiguity whether to call A::() or A::A(int = 0) so we cannnot provide any do-nothing constructor in the second case.
So is it true that even the implicit constructor provided by the compiler gets suppresed in this case.

Please provide some clarification/thoughts.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

好倦 2024-11-13 08:38:32

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

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

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

A constructor with no parameters, or a constructor where all parameters have a default value, is the default construcor.

The compiler will not generate one if you have provided it.

You don't have to provide a default constructor if that doesn't make sense for your type. Of course that prohibits the use of your class in places where a default constructor is needed, but such use probably doesn't make sense either.

世界和平 2024-11-13 08:38:32

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

The compiler only generates a default ctor if you do not explicitly define one. So if you define a ctor, the compiler will not generate a ctor for the class.

您的好友蓝忘机已上羡 2024-11-13 08:38:32

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

请注意,编译器不应该抱怨您没有提供构造函数。当您提供一个(且仅一个)时,它应该自动停止提供默认构造函数

If you need to explicitly disable the use of a constructor, you can make it private to the class.

Note that the compiler shouldn't be whinging about you not providing a constructor. The minute you provide one - and only one - it should automatically stop providing the default constructor

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文