首頁 > 後端開發 > C++ > C 臨時函數參數到底什麼時候被銷毀?

C 臨時函數參數到底什麼時候被銷毀?

Susan Sarandon
發布: 2025-01-04 17:09:44
原創
241 人瀏覽過

When Exactly Do C   Temporary Function Arguments Get Destroyed?

臨時函數參數何時消失?

在 C 中,當建立臨時物件作為函數的參數時,編譯器會自動管理其生命週期。這就提出了一個問題:臨時物件的析構函數在什麼時候保證被呼叫?

根據 C 標準,臨時物件在它們所屬的完整表達式結束時被銷毀。這裡,完整表達式是不是另一個表達式的子表達式的表達式。它通常以控制流語句(例如 if、while、switch)的分號 (;) 或右括號 () 結尾。

在提供的範例中:

class MyClass
{
  MyClass(int a);
};

myFunction(MyClass(42));
登入後複製

The作為函數參數建立的臨時 MyClass 物件將在函數呼叫語句結束後(即遇到分號時)被銷毀。因此,您可以假設在執行任何後續語句之前將呼叫析構函數。

值得注意的是,可以使用 const 引用來延長臨時物件的生命週期。透過將臨時引用綁定到const 引用,其生命週期會延長以匹配引用的生命週期:

MyClass getMyClass();

{
  const MyClass& r = getMyClass(); // full expression ends here
  ...
} // object returned by getMyClass() is destroyed here
登入後複製

此技術可以節省不必要的複製構造,同時保留函數傳回的值,尤其是在傳回值最佳化時不適用。然而,隨著 C 11 中移動語意的出現,它的實用性有所減弱。

以上是C 臨時函數參數到底什麼時候被銷毀?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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