Visual Studio 15.7更新:更改构造函数继承

时间:2018-05-07 21:12:07

标签: c++ visual-studio visual-c++

在最新的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
}

我的问题是:

  • 报价实际上是什么意思?改变了什么?
  • 这个如何提高C ++的一致性(AFAIK,标准没有改变ctor继承方面的任何内容)?

0 个答案:

没有答案