首頁 > 後端開發 > C++ > 為什麼臨時字串物件的'c_str()”指標在其創建函數'foo()”返回後在'bar()”中有效?

為什麼臨時字串物件的'c_str()”指標在其創建函數'foo()”返回後在'bar()”中有效?

Linda Hamilton
發布: 2024-12-09 07:01:07
原創
386 人瀏覽過

Why is the `c_str()` pointer of a temporary string object valid in `bar()` after its creating function `foo()` has returned?

foo() 和bar() 中物件的生命週期

在C 中,在函數呼叫期間建立的物件被視為臨時對象。了解它們的生命週期對於確保正確的程序行為至關重要。

考慮以下程式碼:

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

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

bar( foo().c_str() );
登入後複製

問題:

為什麼c_str( ) foo() 傳回的暫時物件的指標在bar()函數中有效,即使在foo() 之後完成?

答案:

根據 C 標準,一旦包含臨時物件建立的完整表達式完成,臨時物件就會被銷毀。在這種情況下,完整的表達式是:

bar( foo().c_str() );
登入後複製

在ASCII 藝術中,臨時物件的生命週期如下所示:

____________________   full-expression ranges from 'b' to last ')'
bar( foo().c_str() );
     ^^^^^          ^
       |            |
     birth       funeral
登入後複製

臨時物件是在foo( ) 時所建立的被呼叫(誕生)並在表達式執行完成(葬禮)後銷毀,確保c_str() 指標在bar() 執行過程中保持有效。

以上是為什麼臨時字串物件的'c_str()”指標在其創建函數'foo()”返回後在'bar()”中有效?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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