派生类构造函数初始化列表中的基类默认构造函数是否冗余?
派生类构造函数初始化列表中显式调用基类默认构造函数是否冗余?
从C++语法规则来说,绝大多数情况下这属于冗余写法。
按照C++标准,当派生类构造函数的初始化列表没有显式指定基类的构造函数调用时,编译器会自动调用基类的可访问默认构造函数。也就是说,你给出的这段代码:
DerivedClass::DerivedClass(int x) : BaseClass(), member_derived(x) { //Do something; }
和去掉BaseClass()的版本:
DerivedClass::DerivedClass(int x) : member_derived(x) { //Do something; }
在编译后的执行逻辑完全一致,编译器都会自动插入对基类默认构造函数的调用。
不过也有开发者会刻意保留这种写法,核心目的是提升代码可读性——对于不熟悉C++构造规则的维护者来说,显式写出BaseClass()能更直观地表明基类是通过默认构造初始化的,避免被误以为是遗漏了基类的初始化步骤。
但从语法和执行效率上看,这个显式调用完全没有必要,属于可选的风格类写法,而非功能必需的代码。
内容的提问来源于stack exchange,提问作者ontherocks
相关产品推荐
相关产品推荐

