具有一个默认参数的构造函数

发布于 2024-09-29 14:22:11 字数 268 浏览 5 评论 0原文

假设我有一个类

class C {
       C(int a=10);
};

,为什么如果我调用

C c;

构造函数 C(int =10) 就会被调用,如果我调用

C c();

默认构造函数就会被调用?如何避免这种情况?我只想执行我的构造函数,我尝试将默认构造函数设为私有,但它不起作用。

Suppose I have a class

class C {
       C(int a=10);
};

why if I call

C c;

the contructor C(int =10) is called and if I call

C c();

the default constructor is called? How to avoid this? I want to execute only my constructor, I tried to make the default constructor private, but it doesn't work.

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

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

发布评论

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

评论(3

陌路黄昏 2024-10-06 14:22:11
  1. 实际上,C c(); 应该被解析为函数声明。为了显式调用默认构造函数,您需要编写C c = C();
  2. 一旦定义了任何构造函数,编译器将不会为您的类型提供默认构造函数,因此无法调用任何构造函数。
  3. 由于可以使用一个参数调用构造函数,因此它充当隐式转换函数。您应该考虑将其设为显式,以防止隐式转换在意外时刻启动。
  1. Actually, C c(); should be parsed as a function declaration. In order to explicitly invoke the default-constructor, you need to write C c = C();.
  2. Once you define any constructor, the compiler will not provide a default-constructor for your type, so none could be called.
  3. Since your constructor can be invoked with one argument, it serves as an implicit conversion function. You should consider making it explicit, to prevent implicit conversions from kicking in at unexpected moments.
小清晰的声音 2024-10-06 14:22:11

代码 C c(); 并不像您想象的那样:

它声明了一个名为 c 的函数,该函数不接受任何参数并返回一个 C.它相当于

C c(void);

The code C c(); doesn’t do what you think it does:

It declares a function called c that takes no arguments and returns a C. It is equivalent to

C c(void);
眼眸印温柔 2024-10-06 14:22:11

这是因为 c() 被解释为名为 c 的函数。 C() 将触发 C 类的适当构造函数

This is because the c() is interpreted as a function named c. C() will trigger the appropriate constructor for the C class

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