在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);
}
居住