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