我知道默认构造函数不是继承的,如中所述n3337 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf.
那里有一个例子:
struct B2 {
B2(int = 13, int = 42);
};
struct D2 : B2 {
using B2::B2;
};
有很好的解释:
继承构造函数的候选集D2
for B2
is
...
—B2(int = 13, int = 42)
—B2(int = 13)
—B2()
最重要的是:
存在于中的构造函数集D2
is
—D2()
,隐式声明的默认构造函数,不继承
对我来说,这个例子并没有显示出差异,从某种意义上说,即使这个构造函数是继承的 - 它的行为与隐式声明的默认构造函数没有什么不同。
我需要一个例子来展示这种差异,以便熟悉 C++03 但想要学习 C++11 的观众可以轻松理解。
[UPDATE]
所有答案(包括我自己的)都是善意的“如果默认 c-tor 被继承,那么该示例将编译/不编译".
我更喜欢结果(可观察的行为)与其他情况不同的答案。
一个可能的区别:来自具有默认构造函数的类的多构造函数继承。例如:
struct A { A(int=0); };
struct B { B(double=3.14); };
struct C : A, B {
using A::A;
using B::B;
};
C c;
如果默认构造函数被继承,C
将从两者继承一个A
and B
,导致歧义。
我想不出多重构造函数继承的用例,所以这可能不是您正在寻找的完美示例,但它确实有用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)