BCS*_*BCS 15 c++ in-class-initialization c++11 inheriting-constructors
我在我的项目中遇到以下错误:
error: use of deleted function ‘C::C(int)’ note: ‘C::C(int)’ is implicitly deleted because the default definition would be ill-formed: error: use of deleted function ‘M::M()’
这是我正在使用的代码:
struct M {
M(int){}
M() = delete; // Allowing this would work.
};
struct B {
B(int) {}
B() = delete;
};
struct C : public B {
using B::B;
M n = {5};
// C(int i) : B(i) {} // Adding this would work
};
C c{1};
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么会这样?
很明显,语言愿意在继承的构造函数的末尾添加更多的初始化(因为它愿意调用默认的构造函数).显然,它愿意隐式地将对非默认构造函数(类初始化)的调用添加到显式定义的构造函数的末尾.但由于某种原因,我不明白,它不愿意同时做这两件事.
根据这个问题,完美转发不够完美,不应该在这里使用.
注意:在实际情况下,构造函数B更复杂并且可能会发生变化,因此手动转发内容并不是一个可行的选择.
| 归档时间: |
|
| 查看次数: |
182 次 |
| 最近记录: |