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