在C++20中继承构造函数(VisualStudio2019)

我正在使用带有 /std:c++latest 的 Visual Studio 2019 (v16.10.3) 并且编译:

class Base
{
public:
   Base(int x) {}
};

class Derived : public Base
{
// no constructors declared in Derived
};

int main() {
   Derived d(5);
}

对于标准的先前版本,我必须使用 using 指令声明继承的构造函数:

class Derived : public Base
{
   using Base::Base;
};

这是 C++20 中的新东西还是 Microsoft 特定的东西?

回答

这是 C++20 中的新东西还是 Microsoft 特定的东西?

与继承的构造函数无关。改变的是聚合初始化在某些条件下可能使用括号。Derived由于没有私有部分,因此被认为是聚合,因此我们直接初始化其基类和成员。

当我们添加一个公共成员时它甚至可以工作:

class Base
{
public:
   Base(int ) {}
};

struct Derived : public Base
{
// no constructors declared in Derived
    int y;
};

int main() {
   Derived d(5, 4);
}

居住


以上是在C++20中继承构造函数(VisualStudio2019)的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>