mac*_*ord 3 c++ initialization reference initializer-list
请考虑以下代码:
class Foo {
Foo() {}
};
class Bar {
Foo &Foo_ref;
Bar() : Foo_ref() {}
};
Run Code Online (Sandbox Code Playgroud)
按原样编写,我收到错误:
tmp.cc: In constructor Bar::Bar(): tmp.cc:7: error: value-initialization of Foo& Bar::Foo_ref, which has reference type
我试过了我能想到的每一个变化.我究竟做错了什么?如何将引用成员初始化为新实例?我现在使用const指针而不是引用作为解决方法,但我更喜欢使用引用.
必须始终将引用绑定到对象.您必须在构造函数中传递要引用的对象
Bar(Foo &foo) : Foo_ref(foo)
{
}
Run Code Online (Sandbox Code Playgroud)
如果你不想(或不能)传递Foo
给Bar
构造函数 - 你必须使用指针:
class Bar {
Foo *Foo_ptr;
Bar() : Foo_ptr(nullptr) {}
};
Run Code Online (Sandbox Code Playgroud)
您可以将引用成员变量视为必须在初始化列表中绑定的指针
怎么了
class Bar
{
Foo myFoo;
Bar() : myFoo() {}
};
Run Code Online (Sandbox Code Playgroud)
如果你想要一个全新的 Foo 对象?