簡體   English   中英

將非常量左值引用綁定到右值

[英]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 ”的引用由類型“ cv2 T2 ”的表達式初始化,如下所示:
...
(5.2.2.2) - 如果T1是非類類型,則創建臨時類型為“ cv1 T1 ”並從初始化表達式復制初始化(8.5)。 然后將引用綁定到臨時。

所以int &&rfint = 10; 創建一個臨時的,引用綁定到它,而不是10本身。

是的,該臨時的生命周期延長到rfint的生命周期,因此當rfint在范圍內時,您可以隨意執行任何操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM