C++中带全默认参数的构造函数应归类为默认还是参数化构造函数?
关于C++中“带全默认参数的构造函数属于默认构造函数”的概念澄清
首先明确C++标准里的核心定义:默认构造函数的判定标准是“能够被无参数调用”,而非“完全没有参数”。
- 你理解的“无参构造函数属于默认构造函数”完全正确,这是默认构造函数最直观的一种形式。
- 当一个构造函数的所有参数都设置了默认值时,它满足“可以无参数调用”的条件,因此也被归类为默认构造函数。
你之所以产生困惑,是因为觉得它支持传参调用就应该属于参数化构造函数,但这两者并不互斥:这个构造函数本身是同一个实体,它既支持无参调用(符合默认构造函数的定义),也支持带参调用(覆盖默认值),这只是同一函数的不同调用方式而已,不会被同时归为两类构造函数,也不属于构造函数重载(重载需要多个不同的函数签名)。
结合你的代码场景来看:
- 创建
employee e1;时,触发的是该构造函数的无参调用逻辑,此时它表现出默认构造函数的行为; - 创建
employee e2(xxx);时,是传入参数覆盖默认值的调用方式,但这并没有改变该构造函数本身是默认构造函数的属性。
额外补充一个验证点:如果你的类中同时定义了无参构造函数和全参数带默认值的构造函数,编译器会直接报错——因为当你无参调用时,编译器无法区分要调用哪一个默认构造函数,这也从侧面印证了带全默认参数的构造函数确实属于默认构造函数的范畴。
内容的提问来源于stack exchange,提问作者CREATIVITY Unleashed
相关产品推荐
相关产品推荐

