首頁  >  文章  >  後端開發  >  為什麼常數引用可以延長 C 中臨時物件的生命週期?

為什麼常數引用可以延長 C 中臨時物件的生命週期?

Linda Hamilton
Linda Hamilton原創
2024-10-26 16:04:03874瀏覽

Why Do Const References Extend the Lifetime of Temporary Objects in C  ?

透過常數引用來理解臨時物件的生命週期

簡介:

簡介:

在C 中,生命週期臨時物件的類型通常只延伸到創建它們的表達式的末尾。但是,當臨時物件綁定const引用時會出現異常,延長了其生命週期,超出了原來的作用域。

具體詢問:
<code class="cpp">string foo() {
  return string("123");
}

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

下面的程式碼為什麼編譯透過執行成功,即使 foo 函數傳回的字串是臨時物件?

答案:

C 標準明確定義綁定臨時物件對堆疊上const 的引用會延長臨時變數的生命週期,直到引用本身的生命週期為止。因此,在提供的程式碼中, foo() 傳回的臨時字串一直保持活動狀態,直到主函數的右大括號為止。

機制:

此功能確保對臨時物件的引用不會成為懸空引用,否則會導致未定義的行為。當臨時物件綁定到 const 引用時,它的記憶體被有效地固定,允許程式繼續安全地使用它。

限制:

需要注意的是此生命週期延長僅適用於基於堆疊的引用。相反,作為物件成員的引用不會延長臨時物件的生命週期。

其他資訊:有關此主題的更詳細討論,請參閱GotW #88:赫伯·薩特「最重要的常量」候選人。

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

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