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