ホームページ >バックエンド開発 >C++ >std::string は C 11 で連続して格納され、Null で終了しますか?

std::string は C 11 で連続して格納され、Null で終了しますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-30 00:42:101001ブラウズ

Is std::string Contiguously Stored and Null-Terminated in C  11?

C 11 では std::string は連続して格納され、Null で終了しますか?

以前の議論で、メモリに関する懸念が提起されました。 C 0x の std::string のレイアウトと null 終了。 Herb Sutter は、同時実行性の理由から null 終了を要求し、コピーオンライト実装を禁止することを提案しました。

C 11 は連続ストレージを保証します

質問で述べたように、C 11 std::string の内容が連続して保存されるようにします。しかし、ヌル終了に関する提案が C 11 の最終草案で採用されたかどうかという疑問は未解決のままです。

C 11 のヌル終了

C に従って11 標準 [string.accessors] p1、std::basic_string::c_str() states:

「[0,size()] の各 i に対して p i == &operator[](i) となるようなポインタ p を返します。」

は、s によって返されるポインタを意味します。 c_str() は、文字列 (&s[0]) の最初の文字のアドレスに相当します。したがって、C 11 では std::string は null で終了することが保証されています。

使用上の影響

null 終了の保証は、&str[ を安全に使用できることを意味します。 0] C 11 の std::string の最初の文字にアクセスし、これに依存する従来のコードとの互換性を確保します。行動。

以上がstd::string は C 11 で連続して格納され、Null で終了しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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