我有一段类似于这样的代码:
class AClass {
public:
struct AStruct { };
AClass(){}
private:
const AStruct m_struct;
};
int main() {
AClass a;
}
它抛出了这个编译错误(使用 Clang LLVM 版本 5.1):
error: constructor for 'AClass' must explicitly initialize
the const member 'm_struct'
如果我为
struct AStruct
指定一个C++11默认构造函数,我会得到相同的错误: struct AStruct {
AStruct() = default;
};
然而,可以通过编写一个空构造函数来解决这个问题:
struct AStruct {
AStruct(){} // fixed
};
为什么我需要指定一个空构造函数?结构体不是会自动创建具有公共访问权限的构造函数吗?
C++11的默认构造函数为什么不能解决这个问题?
AStruct
和AClass
的使用非常令人困惑,特别是因为它们都是类(class)。你能不能想出更好的名字? - Lightness Races in Orbitconst
成员值初始化即可 - http://coliru.stacked-crooked.com/a/aa3bcb77ce7b04eb - Praetorian