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

Rug*_*rra 7 c++ constructor default-parameters

假设我有一堂课

class C {
       C(int a=10);
};
Run Code Online (Sandbox Code Playgroud)

为什么我打电话

C c;
Run Code Online (Sandbox Code Playgroud)

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

C c();
Run Code Online (Sandbox Code Playgroud)

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

sbi*_*sbi 17

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


Kon*_*lph 14

代码C c();不符合您的想法:

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

C c(void);
Run Code Online (Sandbox Code Playgroud)