ホームページ >バックエンド開発 >C++ >`&s[0]` は C std::string 内の文字への安全で連続したポインタですか?

`&s[0]` は C std::string 内の文字への安全で連続したポインタですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-05 15:41:10960ブラウズ

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

Can "&s[0]" は std::string 内の連続する文字を参照できますか?

次のようなコードであることがわかりました。

std::string s;
s.resize( strLength );
memcpy( &s[0], str, strLength );

が std::vector であれば安全ですが、問題は、それが std::string の安全な使用法であるかどうかです。

C 98/03 では、std::string の割り当てが連続していることは保証されません。ただし、C 11 はこの隣接性を強制します。実際には、ほとんどの実装は連続ストレージを使用します。

&s[0] の使用は、長さがゼロの文字列であっても、C 11 標準によって機能することが保証されています。これは、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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。