首頁 > 後端開發 > C++ > 將臨時 `std::string::c_str()` 傳遞給 C 中的函數是否安全?

將臨時 `std::string::c_str()` 傳遞給 C 中的函數是否安全?

Barbara Streisand
發布: 2024-11-06 22:51:03
原創
966 人瀏覽過

Is it safe to pass a temporary `std::string::c_str()` to a function in C  ?

檢查std::string::c_str() 中臨時字串的持久性

在C 程式設計領域,臨時字串的使用經常引起以下問題他們的記憶體管理和耐用性。本文深入探討了將 std::string::c_str() 與臨時字串結合使用的具體細節,並檢查其與 C 標準的一致性。

問題:

考慮以下程式碼片段:

void consumer(char const* p)
{
  std::printf("%s", p);
}

std::string random_string_generator();

consumer(random_string_generator().c_str());
登入後複製

程式碼是否表現出正確的行為,或是否有與暫時物件的生命週期相關的潛在陷阱?

答案:

根據C 標準,在建立臨時std::string 物件並取得其c_str() 指標後,此string 物件的生命週期將延長至:

  • string 物件被呼叫
  • 字串物件被明確析構

在提供的程式碼範例中,暫時std::string 物件(random_string_generator()) 在完整的表達,而不是之前或之後。由於消費者是在同一表達式中呼叫的,因此程式碼被認為是格式良好的。

但是,值得注意的是,如果消費者要儲存指標以供將來使用,則程式碼將不再安全。這是因為臨時字串物件的生命週期在消費者存取指標之前就已經結束了。

結論:

有問題的程式碼確實是格式良好的,根據符合 C 標準,只要它在同一表達式中使用即可。了解臨時物件的生命週期規則對於避免記憶體管理問題並確保正確的程式行為至關重要。

以上是將臨時 `std::string::c_str()` 傳遞給 C 中的函數是否安全?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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