《C++ Primer(第五版)》第629页指出:
- 如果基类构造函数具有默认参数,则不会继承这些参数。
我亲自测试了一下,对我来说,由编译器生成的派生构造函数似乎也具有与基类构造函数相同的默认参数。
以下是一个小测试:
#include <iostream>
struct Base
{
Base() = default;
Base(int x_, int y_ = 88, int z_ = 99)
: x(x_), y(y_), z(z_) {}
virtual void debug() const
{ std::cout << "\nx - " << x << ", y - " << y << ", z - " << z << '\n'; }
private:
int x, y, z;
};
struct Derived : Base
{
using Base::Base;
};
int main() {
Base B(1);
B.debug(); // x - 1, y - 88, z - 99
Derived D(5);
D.debug(); // x - 5, y - 88, z - 99
return 0;
}
您可以在此处运行代码 - http://coliru.stacked-crooked.com/a/26cbb85757c1f021 那么我们是否也继承了继承构造函数的默认参数呢? 如果没有,为什么我最后两个成员不是垃圾值,而是与从基类继承的构造函数的默认参数完全相同的值? 同时,在互联网上搜索了很多关于这个问题的清晰回答,但都没有找到。