Dan*_*Dan 4 c++ constructor initialization const
在这个简单的例子中,为什么我需要创建'member'const以便编译它?
struct ClassA
{
ClassA(int integer) {}
};
struct ClassB
{
ClassB(int integer):
member(integer)
{
}
const ClassA& member;
};
int main()
{
ClassB* b = new ClassB(12);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
否则,我收到此错误:
错误:从类型'int'的表达式初始化类型'ClassA&'的引用无效
Jar*_*Par 10
之所以是什么实际发生在这里你正在使用从隐式转换int到ClassA在初始化member.在扩展形式中,它实际上正在执行以下操作
member(ClassA(integer))
Run Code Online (Sandbox Code Playgroud)
这意味着该ClassA实例是临时的.仅对const引用引用临时变量是不合法的,因此会出现编译器错误.
最简单的解决方法是删除&成员上的修饰符并使其仅为类型ClassA
ClassA member;
Run Code Online (Sandbox Code Playgroud)
另外,最好放在构造函数explicit前面ClassA以避免静默隐式转换.
explicit ClassA(int integer){}
Run Code Online (Sandbox Code Playgroud)