將std::string::c_str() 與臨時字串一起使用的潛在陷阱
考慮以下C 程式碼片段:
這段程式碼提出了一個問題:它是否符合C 標準。
這個問題源自於 random_string_generator() 傳回一個暫時的 std::string 物件。然後,我們取得 c_str() 指針,這可能會使臨時 std::string 物件在使用該指標之前容易被破壞。
要理解其中的意義,我們需要深入研究 C 中臨時物件的生命週期。
根據 C 標準,臨時變數的生命週期會一直延伸到創建它的完整表達式的末尾。在這種情況下,完整的表達式是對消費者的呼叫。因此,暫時的 std::string 物件要等到消費者函數執行完畢後才會被銷毀。
這樣,我們獲得的 c_str() 指標將在整個調用消費者的過程中保持有效,從而使我們的程式碼良好-形成且使用安全。
需要注意的是,此保證僅在完整表達式的生命週期內有效。如果 c_str() 指標在此上下文之外儲存和使用,則行為將變得未定義,因為臨時 std::string 物件可能已被銷毀。
以上是在 C 中使用'std::string::c_str()”與臨時字串安全嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!