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

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

Linda Hamilton
發布: 2024-10-26 16:04:03
原創
927 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板