【问题标题】:Caveat with C++11 inherited constructor警告 C++11 继承的构造函数
【发布时间】:2017-08-05 03:11:20
【问题描述】:

https://en.wikipedia.org/wiki/C++11#Object_construction_improvement

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

谁能给我一个例子来说明“派生类中的构造函数也不存在与继承的基类中的签名匹配。”的问题?

【问题讨论】:

  • 我修复了维基百科的文章。

标签: c++ c++11


【解决方案1】:

这意味着如果派生类中有构造函数,其参数列表与基类中any构造函数的参数列表匹配,则采用该派生类的构造函数并隐藏 基类'

例如

struct Foo
{
   Foo(){std::cout << "Foo default ctor\n";}
   Foo(int){std::cout << "Foo(int)\n";}
};

struct Bar : Foo
{
   using Foo::Foo;
   Bar(int){std::cout << "Bar\n";} // won't implicitly call Foo(int)
};

int main()
{
    Bar b(1);
}

来自 §12.9/3 [class.inhctor](强调我的):

对于候选继承构造函数集中的每个非模板构造函数,而不是构造函数 没有参数或具有单个参数的复制/移动构造函数,构造函数是隐式的 声明具有相同的构造函数特征除非有一个用户声明的构造函数具有相同的 在使用声明出现或构造函数将是默认值的完整类中的签名, 复制或移动该类的构造函数

【讨论】:

猜你喜欢
  • 2013-05-21
  • 1970-01-01
  • 2013-12-24
  • 1970-01-01
  • 2014-10-19
  • 2013-09-04
  • 2014-11-26
  • 2023-03-27
  • 2014-01-27
相关资源
最近更新 更多