C 11 の std::string の Null 終了
C では、通常、文字列は std::string クラスを使用して表されます。 C 11 より前は、std::string オブジェクトが常に null で終了するかどうかに関してあいまいさがありました。
C 11 の連続ストレージの保証
C 11 では、 std::string クラスは、その内容が連続して格納されることが保証されました。これは、Herb Sutter が 2008 年の記事で提起した懸念の 1 つを解決したものです。
ヌル終了提案の採用
ヌル終了の要件とコピーの禁止については、 -on-write の実装では、Sutter の記事で言及された提案は C の最終ドラフトでは完全には採用されませんでした。 11.
&str[0]
使用の安全性 ただし、[string.accessors] p1 に従って、std::basic_string::c_str():
Returns: A pointer p such that p + i == &operator[](i) for each i in [0,size()].
これは、s.c_str() によって返されるポインターを意味します。ここで、sは文字列であり、文字列 (&s[0]) の最初の文字のアドレスに相当します。
したがって、C 11 では、&str[0] を使用して最初の文字にアクセスするのが安全です。 std::string オブジェクト。外部要因によって変更されていないと仮定します。
以上がC 11 の std::string は Null で終了することが保証されていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。