ewq*_*468 1 c++ visual-studio c++20 visual-studio-2019
我正在使用带有 /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);
}
Run Code Online (Sandbox Code Playgroud)
对于标准的先前版本,我必须使用 using 指令声明继承的构造函数:
class Derived : public Base
{
using Base::Base;
};
Run Code Online (Sandbox Code Playgroud)
这是 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);
}
Run Code Online (Sandbox Code Playgroud)