繁体   English   中英

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

[英]constructor with one default parameter

假设我有一堂课

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

为什么我打电话

C c;

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

C c();

默认的构造函数叫做? 如何避免这种情况? 我只想执行我的构造函数,我试图将默认的构造函数设为私有,但这是行不通的。

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

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

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

C c(void);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM