首頁 > 後端開發 > C++ > 為什麼 C 臨時字串的 `c_str()` 在函數呼叫後仍然有效?

為什麼 C 臨時字串的 `c_str()` 在函數呼叫後仍然有效?

Mary-Kate Olsen
發布: 2024-12-16 18:57:21
原創
180 人瀏覽過

Why Does a C   Temporary String's `c_str()` Remain Valid After the Function Call?

重新訪問臨時物件的生命週期

提供的程式碼片段展示了 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() 傳回的臨時變數的「c_str()」指標仍然有效?常識可能表明應該在呼叫 bar() 之前銷毀臨時物件。然而,事實並非如此。

根據 C 標準,臨時物件的生命週期會延長,直到詞法上包含建立該物件的右值的完整表達式的求值完成為止。這意味著在給定的程式碼中, foo() 傳回的臨時物件將保持活動狀態,直到對 bar() 的呼叫完成後。

為了形象化這個概念,請考慮以下內容:

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

臨時物件是在呼叫 foo() 時創建的(表示為「誕生」)。它在整個表達式的求值過程中保持活動狀態,在本例中是函數呼叫 bar(foo().c_str())。一旦函數呼叫完成,臨時物件就會被銷毀(表示為“葬禮”)。

以上是為什麼 C 臨時字串的 `c_str()` 在函數呼叫後仍然有效?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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