我试着这样做
MyClass& x;
x = MyClass(a,b,c);
Run Code Online (Sandbox Code Playgroud)
但是C++不会让我这样做,因为它认为x在开始时是未初始化的.
所以我试着去做
MyClass& x = MyClass(a,b,c);
Run Code Online (Sandbox Code Playgroud)
但得到错误说 invalid initialization of non-const reference of type 'MyClass&' from an rvalue of type 'MyClass'
它出什么问题了?看来我现在根本无能为力.如何解决初始化问题?
const必须使用左值表达式(实质上是指代存储器位置的表达式)初始化对非的普通引用,例如
MyClass o{ a, b, c };
MyClass& r = o;
Run Code Online (Sandbox Code Playgroud)
如果引用是const,或者它是rvalue引用(表示为&&),则初始化器可以是rvalue表达式,例如由函数调用生成的临时表达式:
MyClass const& rc = foo();
MyClass&& rr = foo();
Run Code Online (Sandbox Code Playgroud)
在这些情况下,对于本地引用,临时的生命周期将扩展到引用的范围.
并且一个特殊的特性是,如果初始化器生成派生类的临时类,那就是完整的派生类对象,其生命周期被扩展,即对于为引用指定的类没有切片.
更一般地,引用可以绑定到临时的任何部分,只要该部分具有兼容类型,这将延长完整临时对象的生命周期.
引用必须引用已存在的对象.所以你需要先拥有一个对象才能引用它.
MyClass y = MyClass(a,b,c);
MyClass &x = y;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |