ホームページ >バックエンド開発 >C++ >C 11 の std::string は Null で終了することが保証されていますか?

C 11 の std::string は Null で終了することが保証されていますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-07 20:27:13857ブラウズ

Is std::string in C  11 Guaranteed to be Null-Terminated?

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

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