在最新的Visual Studio更新(15.7)的release notes中,Microsoft声明(第9个要点):
继承构造函数现在与继承任何其他基类成员的工作方式相同。以前,这通过声明一个委托给原始构造函数的新构造函数来工作;通过此更改,基类构造函数在派生类中是可见的,就好像它们是派生类构造函数一样,从而提高了C ++的一致性。
我有点困惑这点实际上意味着什么。
AFAIK,构造函数继承需要显式using BaseClass::BaseClass;
(自C ++ 11以来):
struct Base
{
Base() = default;
Base(int x) : x(x) {}
int x;
};
struct Derivative : Base
{
using Base::Base;
Derivative(int x, int y) : Base(x), y(y) {}
int y;
};
void main()
{
Derivative x(10); // this is ok
}
我对引用的理解是,MS允许构造函数继承而不需要using BaseClass::BaseClass;
。但是在应用更新后测试以下代码似乎并未改变这些方面的任何内容:
struct Base
{
Base() = default;
Base(int x) : x(x) {}
int x;
};
struct Derivative : Base
{
int y{};
};
void main()
{
Derivative x(10); // still illegal, compiler error
}
我的问题是: