如何在C ++中初始化对象引用?

时间:2016-07-31 02:52:43

标签: c++ reference

我试着做

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'

它有什么问题?看来我现在根本无法做任何事情。如何解决初始化问题?

2 个答案:

答案 0 :(得分:9)

对非const的普通引用必须使用左值表达式(本质上是一个引用内存位置的表达式)进行初始化,例如

MyClass o{ a, b, c };
MyClass& r = o;

如果引用是const,或者它是右值引用(由&&表示),则初始化器可以改为rvalue表达式,例如函数调用生成的临时表达式:

MyClass const& rc = foo();
MyClass&& rr = foo();

在这些情况下,对于本地参考,临时的生命周期将扩展到参考范围。

一个特殊功能是,如果初始化程序生成派生类的临时类,那么它的生命周期类扩展的完整派生类对象,即没有为指定的类指定切片

更一般地说,引用可以绑定到临时的任何部分,只要该部分具有兼容类型,这将延长完整临时对象的生命周期。

答案 1 :(得分:6)

引用必须引用已存在的对象。所以你需要先拥有一个对象才能引用它。

MyClass y = MyClass(a,b,c);
MyClass &x = y;