gpt4 book ai didi

c++ - 隐式删除的默认构造函数适用于 C++14

转载 作者:可可西里 更新时间:2023-11-01 15:27:43 33 4
gpt4 key购买 nike

我正在为一些没有编译的代码做一些测试,我发现这段代码:

struct A {
A(int) {};
virtual void foo() = 0;
};

struct B : public virtual A {
virtual void bar() = 0;
};

struct C : public B {
C() : A(1) {}
virtual void foo() override {}
virtual void bar() override {}
};

int main() {
C c;
return 0;
}

在 C++11 中无法编译(在 g++ 7.0.1 上),'B::B()' 被隐式删除,因为默认定义格式不正确,而在 C 中++14 编译成功。

我试图找出 C++14 的哪个新特性允许它工作,但无济于事。 description在 cppreference 中似乎没有提到任何类似的东西。

为什么这段代码可以在 C++14 中编译,但不能在 C++11 中编译?

最佳答案

毫无疑问,这是 gcc 7 中的一个错误,因为当我在带有 gcc 7+ 的在线编译器中检查您的代码时,它运行完美,没有任何问题。

所以我在这里为您提供在线 IDE,您可以在其中设置您最喜欢的编译器并尝试进行测试,如果您愿意的话。

https://godbolt.org/

抱歉,我无法为您提供更好的帮助,但我无法重现您的错误。

关于c++ - 隐式删除的默认构造函数适用于 C++14,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43410252/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com