[英]C++: Initializing a reference member to an object created in the initialization list
请考虑以下代码:
class Foo {
Foo() {}
};
class Bar {
Foo &Foo_ref;
Bar() : Foo_ref() {}
};
按原样编写,我收到错误:
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)
{
}
如果你不想(或不能)将Foo
传递给Bar
构造函数 - 你必须使用指针:
class Bar {
Foo *Foo_ptr;
Bar() : Foo_ptr(nullptr) {}
};
您可以将引用成员变量视为必须在初始化列表中绑定的指针
怎么了?
class Bar
{
Foo myFoo;
Bar() : myFoo() {}
};
如果你想要一个全新的Foo对象?
构造函数必须获取参数,将引用设置为在引用之前初始化的成员,或者将引用设置为全局Foo
对象。 您不能将引用绑定到临时(即使引用是const
,也只能在构造函数结束之前生效)。
extern Foo gFoo;
class Bar {
Foo foo;
Foo &Foo_ref;
Bar() : Foo_ref(gFoo) {}
//or
//Bar() : Foo_ref(foo) {}
Bar(Foo& foo) : Foo_ref(foo) {}
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.