测试显示了一个奇怪的行为(c++14
, g++ 4.9.1
, clang 3.5.5
):
把它们加起来:
- 如果
B
没有提供它可以使用的其他构造函数A::A()
- if
B
提供了它不能使用的其他构造函数A::A()
,但它使用了A::A(whatever arguments)
,这是出乎意料的行为(至少对我而言)。
设置 1:
struct A {
A() {};
A(int) {}; // with or without this overload the result are the same
};
struct B : A {
using A::A;
};
B b0{}; // OK
设置 2:
struct A {
A() {}; // with a default constructor instead (empty class A)
// the results are the same
};
struct B : A {
using A::A;
B(int){}
};
B b0{}; // no matching constructor
B b1{24}; // OK
设置 3:
struct A {
A() {};
A(int) {};
};
struct B : A {
using A::A;
B(int, int){}
};
B b0{}; // no matching constructor
B b1{24}; // OK
B b2{24, 42}; // OK
为什么会发生这种情况以及如何“修复”它。