我试过
MyClass& x;
x = MyClass(a,b,c);
但是C++不让我这样做,因为它认为x一开始是未初始化的。
所以我试着去做
MyClass& x = MyClass(a,b,c);
但出现错误提示 Invalid initialization of non-const reference of type 'MyClass&' from an rvalue of type 'MyClass'
这是怎么回事?看来自己现在简直什么都做不了了。如何解决初始化问题?
最佳答案
对非 const
的普通引用必须使用左值表达式(本质上是指代内存位置的表达式)进行初始化,例如
MyClass o{ a, b, c };
MyClass& r = o;
如果引用是const
,或者如果它是右值引用(用&&
表示),那么初始化器可以改为右值表达式,例如函数调用产生的临时值:
MyClass const& rc = foo();
MyClass&& rr = foo();
在这些情况下,对于本地引用,临时对象的生命周期会延长到引用的范围内。
一个特殊的功能是,如果初始化程序生成一个派生类的临时对象,那么它就是生命周期被延长的完整派生类对象,即没有对为引用指定的类进行切片。
更一般地说,引用可以绑定(bind)到临时对象的任何部分,只要该部分具有兼容的类型,这将延长整个临时对象的生命周期。
关于c++ - 如何在 C++ 中初始化对象引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38680329/