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

标签 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'

这是怎么回事?看来自己现在简直什么都做不了了。如何解决初始化问题?

最佳答案

对非 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/

相关文章:

C++ 未定义对带有队列参数的函数的引用

c++ - 为什么我不能将一个非 const 指针传递给一个以指向 const 的指针作为参数的函数

c++ - 类返回值错误

c++ - "unexpected tokens following preprocessor directive - expected a newline"

c++ - 从二阶导数计算的曲线的 SIMD 优化

c++ - SetWindowLongPtr 与 DialogBoxParam?

c++ - 循环依赖,即使类是前向声明的

c++ - 重载具有其他相同签名的函数以接受引用和 const 引用

c++构造函数使用不正确的参数类型来构造对象

c# - IL Emit TypeBuilder 和解析引用