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

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

Patricia Arquette
Patricia Arquette原創
2024-12-05 15:41:10959瀏覽

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中文網其他相關文章!

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