Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C++;?_C++_Reference - Fatal编程技术网

C++ 如何在C++;?

C++ 如何在C++;?,c++,reference,C++,Reference,我试着去做 MyClass& x; x = MyClass(a,b,c); 但是C++不允许我这么做,因为它认为X在开始时没有初始化。 所以我试着去做 MyClass& x = MyClass(a,b,c); 但是从类型为“MyClass”的右值初始化类型为“MyClass&”的非常量引用时出现错误,说明无效 怎么了?看来我现在什么都做不了。如何避开初始化问题 引用必须引用已存在的对象。所以你需要先有一个对象,然后才能引用它 MyClass y = MyClass(a,b,c

我试着去做

MyClass& x;
x = MyClass(a,b,c);
<>但是C++不允许我这么做,因为它认为X在开始时没有初始化。 所以我试着去做

MyClass& x = MyClass(a,b,c);
但是从类型为“MyClass”的右值初始化类型为“MyClass&”的非常量引用时出现错误,说明
无效


怎么了?看来我现在什么都做不了。如何避开初始化问题

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

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

常量的普通引用必须用左值表达式(本质上是指内存位置的表达式)初始化,例如

如果引用是指向
常量
,或者是右值引用(由
&&
表示),则初始值设定项可以改为右值表达式,例如由函数调用生成的临时表达式:

MyClass const& rc = foo();
MyClass&& rr = foo();
在这些情况下,对于局部引用,临时引用的生存期将扩展到引用的范围

一个特殊的特性是,如果初始值设定项生成一个派生类的临时值,那么它就是一个完整的派生类对象,它的生存期被延长了,也就是说,没有对为引用指定的类进行切片

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

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