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

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

Patricia Arquette
リリース: 2024-12-05 15:41:10
オリジナル
958 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート