首頁 >後端開發 >C++ >C 11 中 std::string 是否連續儲存並以 Null 終止?

C 11 中 std::string 是否連續儲存並以 Null 終止?

Barbara Streisand
Barbara Streisand原創
2024-12-30 00:42:10993瀏覽

Is std::string Contiguously Stored and Null-Terminated in C  11?

std::string 在 C 11 中是否連續儲存並以 Null 結尾?

在先前的討論中,有人提出了有關記憶體的問題C 0x 中 std::string 的佈局和空終止。 Herb Sutter 提議出於並發原因要求空終止並禁止寫入時複製實作。

C 11 保證連續儲存

如問題中所提到的,C 11確保 std::string 內容連續儲存。然而,關於空終止的提案是否在 C 11 最終草案中被採納的問題仍然沒有答案。

C 11 中的空終止

根據C 11 標準[string.accessors] p1, std::basic_string::c_str()狀態:

「傳回一個指標p,對於[0,size()] 中的每個i,p i == &operator[](i),”

表示 s 回傳的指標。 c_str() 相當於字串中首字的位址 (&s[0])。因此,std::string 在 C 11 中保證以空終止。

使用含義

空終止保證意味著使用&str[ 是安全的0] 訪問C 11 中std::string 的第一個字符,確保與依賴此行為的遺留程式碼的相容性。

以上是C 11 中 std::string 是否連續儲存並以 Null 終止?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn