#include <iostream>
using namespace std;
int main() {
int &&rfint = 10;
int &l = rfint;
std::cout << l << std::endl;
std::cout << ++l << std::endl;
std::cout << &l << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用上述构造,我可以10通过非常量左值引用直接操作prvalue l。我什至可以接受prvalue的地址。这是如何运作的?与延长寿命有关吗?
[dcl.init.ref]/5:
\n\n\n\n\n对类型 \xe2\x80\x9c cv1
\nT1\xe2\x80\x9d 的引用由类型 \xe2\x80\x9c cv2T2\xe2\x80\x9d 的表达式初始化,如下所示:
\n ...
\n (5.2. 2.2) \xe2\x80\x94 如果T1是非类类型,则创建 \xe2\x80\x9c cv1T1\xe2\x80\x9d 类型的临时变量,并从初始化表达式复制初始化 (8.5)\n。然后该引用将绑定到临时对象。
因此int &&rfint = 10;创建一个临时对象,并且引用绑定到它,而不是绑定到10它本身。
是的,该临时对象的生命周期延长至 的生命周期,因此您可以在范围内rfint对其执行任何操作。rfint