首頁 >後端開發 >C++ >C 臨時程序的壽命有多長以及為什麼此程式碼可以工作?

C 臨時程序的壽命有多長以及為什麼此程式碼可以工作?

Susan Sarandon
Susan Sarandon原創
2024-12-15 04:42:11273瀏覽

How Long Do C   Temporaries Live and Why Does This Code Work?

臨時物件的生命週期

在C 中,臨時物件的創建有多種原因,例如從函數傳回值或計算表達式。了解臨時變數的生命週期對於正確的程序行為至關重要。

考慮以下程式碼片段:

std::string foo() {
  std::string out = something...;
  return out;
}

void bar(const char* ccp) {
  // do something with the string..
}

bar(foo().c_str());

在此程式碼中,由 foo() 建立的臨時字串由呼叫 bar() 時使用 const char* 指標。問題出現了:為什麼這段程式碼有效?

答案在於臨時程式碼的生命週期。根據 C 標準,當詞法上包含創建該物件的右值的完整表達式被完全求值時,臨時物件將被銷毀。

在上面的程式碼中,完整表達式為 bar(foo().c_str ())。此表達式的計算從 '(左括號)開始,到最後一個 ')'(右括號)結束。在此表達式中,透過計算 foo() 來建立臨時字串,並在臨時字串上呼叫 c_str() 方法。

因此,臨時字串在完整表達式的開頭存在,並且是當表達式完全求值時(即調用 bar() 之後)被銷毀。這解釋了為什麼 bar() 中的 const char* 指標仍然引用有效的字串。

總之, foo() 傳回的臨時值僅在包含它的完整表達式被求值後才會被銷毀,確保foo().c_str() 傳回的指標在呼叫bar() 的過程中保持有效。

以上是C 臨時程序的壽命有多長以及為什麼此程式碼可以工作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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