【发布时间】:2015-10-28 03:03:06
【问题描述】:
C++ Primer(第 5 版)第 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)
那么我们是否也继承了被继承构造函数的默认参数?
如果不是,为什么我没有得到最后 2 个成员的垃圾,而是与从 base 继承的构造函数的默认参数完全相同的值?
也在互联网上搜索了关于此的明确回复,但没有找到。
【问题讨论】:
标签: c++ c++11 inheritance constructor default-arguments