簡體   English   中英

函數獲取參數的生命周期擴展由const&和const返回

[英]lifetime extension for function taking parameter by const& and returning by const&

在C ++中,如果您有以下內容:

std::string get_string();
std::string const& v = get_string();

從get_string()返回的臨時值的生命周期延長了與引用v相同的生命周期;

如果我有以下內容:

std::string const& get_string(std::string const& p) {
  return p;
}

std::string const& v = 
get_string(std::string{"Hello"});

臨時延長的壽命是多少? 或者這是一個懸垂的參考;

我的理解是臨時綁定到p的生命周期,並且僅在函數的持續時間內存在,並且對臨時的輔助引用不會延長生命周期。

預期結果是什么?

是的,臨時的壽命不會進一步延長; 在完整表達之后,引用v變為懸空。

std::string const& v = get_string(std::string{"Hello"});
// v becomes dangled now

我的理解是臨時綁定到p的生命周期,並且僅在函數的持續時間內存在

准確地說, 臨時存在直到完整表達式結束,而不僅僅是函數的持續時間。

  • 函數調用中的引用參數的臨時綁定一直存在,直到包含該函數調用的完整表達式結束:如果函數返回的引用超過了完整表達式,則它將成為懸空引用。

通常,臨時的生命周期不能通過“傳遞”來進一步擴展:從臨時綁定的引用初始化的第二個引用不會影響其生命周期。

這意味着像auto sz = get_string(std::string{"Hello"}).size(); 很好。

暫無
暫無

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

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