web-dev-qa-db-ja.com

std :: stringはC ++ 11では常にnullで終了しますか?

彼のサイトの2008年の投稿で、ハーブサッターは次のように述べています。

これをC++ 0xでさらに強化し、同時実行性に関連する理由から、null終了を要求し、場合によってはコピーオンライトの実装を禁止するという積極的な提案があります。論文は次のとおりです: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2534.html 。この論文の提案の一方または両方が採用される可能性が高いと思いますが、次の会議または2回で確認します。

C++ 11は、std :: stringの内容が連続して格納されることを保証していることを知っていますが、最終ドラフトで上記を採用しましたか?

&str[0]のようなものを使用しても安全ですか?

45
links77

はい。 C++ 0x FDIS 21.4.7.1/1に従い、std::basic_string::c_str()

p + i == &operator[](i)の各pに対して[0,size()]となるようなポインタi

これは、文字列sが与えられた場合、s.c_str()によって返されるポインタは、文字列の最初の文字のアドレス(&s[0])。

50
James McNellis