首頁 > 後端開發 > C++ > `&s[0]` 是指向 C std::string 中字元的安全且連續的指標嗎?

`&s[0]` 是指向 C std::string 中字元的安全且連續的指標嗎?

Patricia Arquette
發布: 2024-12-05 15:41:10
原創
959 人瀏覽過

Is `&s[0]` a Safe and Contiguous Pointer to Characters in a C   std::string?

「&s[0]」可以引用 std::string 中的連續字元嗎?

人們注意到這樣的程式碼:

std::string s;
s.resize( strLength );
memcpy( &s[0], str, strLength );
登入後複製

如果 s 是 std::vector 就會安全,但問題是它是否是安全使用 std::string。

在 C 98/03 中,不保證 std::string 的分配是連續的。然而,C 11 強制執行這種連續性。實際上,大多數實作都使用連續儲存。

C 11 標準保證 &s[0] 的使用可以工作,即使對於零長度字串也是如此。這是因為operator[]定義為:

Returns *(begin() + pos) if pos < size(), otherwise a reference to an object of type T with value charT(); the referenced value shall not be modified
登入後複製

另外,data()定義為:

Returns: A pointer p such that p + i == &s[i] for each i in [0,size()].
登入後複製

因此,「&s[0]」指向連續的字元在std: :string 中且是安全的用法。

以上是`&s[0]` 是指向 C std::string 中字元的安全且連續的指標嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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