小编Mar*_*zer的帖子

构造函数继承和直接成员初始化

我试图使用C++ 11直接数据成员初始化和"使用"语法的组合来继承基类的构造函数.现在使用gcc 5.4.0(在Ubuntu 16.04上),如果数据成员类型没有默认构造函数,我会发现一个奇怪的错误.查看以下最小示例时,最容易理解:

#include <iostream>

struct Foo {
  Foo(int arg) { std::cout << "Foo::Foo(" << arg << ")" << std::endl; }
};

struct Base {
  Base(int arg) { std::cout << "Base::Base(" << arg << ")" << std::endl; }
};

struct Derived : public Base {
  using Base::Base;
  Foo foo{42};
};

int main() {
  Derived derived{120};
}
Run Code Online (Sandbox Code Playgroud)

此代码使用clang编译并执行预期的行为.使用gcc它不会编译,因为编译器删除了构造函数Derived::Derived(int):

ttt.cpp: In function ‘int main()’:
ttt.cpp:17:22: error: use of deleted function ‘Derived::Derived(int)’
   Derived derived{120};
                      ^
ttt.cpp:12:15: note: ‘Derived::Derived(int)’ is implicitly …
Run Code Online (Sandbox Code Playgroud)

c++ gcc constructor c++11

24
推荐指数
2
解决办法
1025
查看次数

标签 统计

c++ ×1

c++11 ×1

constructor ×1

gcc ×1