7

假设我有一堂课

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

为什么我打电话

C c;

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

C c();

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

4

3 回答 3

17
  1. 实际上,C c();应该被解析为函数声明。为了显式调用默认构造函数,您需要编写C c = C();.
  2. 一旦定义了任何构造函数,编译器将不会为您的类型提供默认构造函数,因此无法调用任何构造函数。
  3. 由于可以使用一个参数调用您的构造函数,因此它用作隐式转换函数。您应该考虑制作它explicit,以防止隐式转换在意外时刻启动。
于 2010-10-24T19:39:13.483 回答
14

该代码C c();没有按照您的想法执行:

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

C c(void);
于 2010-10-24T19:39:35.513 回答
1

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

于 2010-10-24T20:19:35.417 回答