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

时间:2010-10-24 19:37:10

标签: c++ constructor default-parameters

假设我有一个班级

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

为什么我打电话

C c;

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

C c();

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

3 个答案:

答案 0 :(得分:17)

  1. 实际上,C c();应该被解析为 函数声明 。为了显式调用default-constructor,您需要编写C c = C();
  2. 一旦定义了任何构造函数,编译器将 不为您的类型提供默认构造函数 ,因此无法调用任何构造函数。
  3. 由于可以使用一个参数调用构造函数,因此它用作隐式转换函数。您应该考虑将其设为explicit,以防止在意外时刻进行隐式转换。

答案 1 :(得分:14)

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

它声明了一个名为c的函数,该函数不带参数并返回C。它相当于

C c(void);

答案 2 :(得分:1)

这是因为c()被解释为名为c的函数。 C()将触发C

的相应构造函数