我试图使用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)