[英]Bind non-const lvalue reference to rvalue
#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;
}
使用上面的結構,我可以通過非常量左值引用l
直接操作prvalue 10
。 我甚至可以接受prvalue的地址。 這是如何運作的? 它與延長的壽命有關嗎?
[dcl.init.ref] / 5:
對類型“ cv1
T1
”的引用由類型“ cv2T2
”的表達式初始化,如下所示:
...
(5.2.2.2) - 如果T1
是非類類型,則創建臨時類型為“ cv1T1
”並從初始化表達式復制初始化(8.5)。 然后將引用綁定到臨時。
所以int &&rfint = 10;
創建一個臨時的,引用綁定到它,而不是10
本身。
是的,該臨時的生命周期延長到rfint
的生命周期,因此當rfint
在范圍內時,您可以隨意執行任何操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.