#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;
}
使用上面的构造,我可以通过非const左值引用10
直接操作prvalue l
。我甚至可以接受prvalue的地址。这是如何运作的?它与extended lifetime相关吗?
答案 0 :(得分:3)
[dcl.init.ref] / 5:
对类型“ cv1
T1
”的引用由“ cv2T2
”类型的表达式初始化,如下所示:
...
(5.2.2.2) - 如果T1
是非类类型,则创建“ cv1T1
”类型的临时类并进行复制初始化(8.5) 来自初始化表达式。然后将引用绑定到临时。
所以int &&rfint = 10;
创建一个临时的,引用绑定到它,而不是10
本身。
是的,该临时的生命周期延长到rfint
的生命周期,因此当rfint
在范围内时,您可以随意执行任何操作。