在C中构造函数是不继承的。然而,我在使用clang 12时发现了这个奇怪的现象。它可以用C17编译,尽管它不应该这样。如果我使用C11或C14,它不能像我预期的那样编译。
#include <iostream>
class Parent{
int x_;
public:
//Parent() = default;
Parent(int const &x) : x_{x} {}
void SayX(){ std::cout << x_ << std::endl; }
};
class Child : public Parent{
// works with C++17 ff.
};
int main(){
Child c {2};
c.SayX();
return 0;
}
--〉Outputs 2 with C17 ff.,doesn't compile with C11,14
1条答案
按热度按时间cbeh67ev1#
你没有看到一个继承的构造函数(你是对的,这些是通过
using
选择的),但是聚合初始化,它确实在C++17中扩展到覆盖基类。来自cppreference(强调我的):聚合的 * 元素 * 是:
所以
Child c {2};
从2
复制构造了它的Parent
子对象。