带有C 11继承的构造函数的警告



https://en.wikipedia.org/wiki/c 11#object_construction_improvement

对于基础级构造函数,C 11允许一类指定该基础 班级构造函数将被继承。因此,C 11编译器将 生成代码以执行继承和转发 派生到基类。这是一个全有或全无的功能: 所有这些基类的构造函数都是转发的,或者没有 他们是。同样,有多种继承的限制,以便 类构造函数不能从两个使用的类中继承 具有相同签名的构造函数。也不能在 存在与继承基础中的签名相匹配的派生类 班级。

有人可以给我一个示例来说明" "的问题,在派生类中是否存在与继承的基类中的签名相匹配的构造函数。"?

,这意味着如果您在派生类中具有构造函数,其参数列表匹配了基类中任何构造器的参数列表,则该类别的类'constructor被取走, hides 基类'

,例如

struct Foo
{
   Foo(){std::cout << "Foo default ctorn";}
   Foo(int){std::cout << "Foo(int)n";}
};
struct Bar : Foo
{
   using Foo::Foo;
   Bar(int){std::cout << "Barn";} // won't implicitly call Foo(int)
};
int main()
{
    Bar b(1);
}

摘自§12.9/3 [class.inhctor](重点是我的):

对于构造函数以外的候选构造函数集中的每个非模板构造函数 没有参数或具有单个参数的副本/移动构造函数,构造函数是隐式的 使用相同的构造函数特征声明,除非有一个用户指定的构造函数 在完整的类中签名的签名出现,或者构造函数为默认值, 复制或移动该类别的构造函数

相关内容

最新更新