首頁  >  文章  >  後端開發  >  為什麼在 C 中將臨時物件綁定到常數參考可以延長其生命週期?

為什麼在 C 中將臨時物件綁定到常數參考可以延長其生命週期?

DDD
DDD原創
2024-11-02 17:03:02627瀏覽

Why Does Binding a Temporary Object to a Constant Reference Extend its Lifetime in C  ?

返回臨時物件並綁定到常數引用

在C 中,將臨時物件分配給常數引用是一種常見操作,最初可能會引發有關其生命週期的問題

問題:

為什麼下面的程式碼有效且不會導致編譯器錯誤?

<code class="cpp">string foo() {
  return string("123");
}

int main() {
  const string& val = foo();
  printf("%s\n", val.c_str());
  return 0;
}</code>

答案:

C 明確定義將臨時物件綁定到基於常數堆疊的引用可延長臨時物件的生命週期以符合引用的生命週期。在這種情況下, foo() 傳回的暫存物件一直存在到 main() 函數結束。

說明:

  • 臨時物件通常有一個生命週期短,在它們出現的表達式末尾結束。
  • 但是,C 允許堆疊上的 const 引用例外。
  • 透過將臨時值綁定到堆疊上的 const 引用,臨時的生命週期會延長以匹配引用的生命週期。
  • 這可以防止因引用指向已銷毀的物件而導致懸空引用錯誤。

注意:

  • 此異常僅適用於基於堆疊的 const 引用。
  • 它不適用於作為物件成員的參考。
  • 更多詳情,請參閱 Herb Sutter 的《GotW #88:「最重要的常數」的候選人》。

以上是為什麼在 C 中將臨時物件綁定到常數參考可以延長其生命週期?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn