1
C++ 11はstd::string
がnulターミネータを内部的に格納することを保証します。明示的なterminate
メソッドなしでどのように達成できますか?std :: stringはNUL charをどのように追跡するのですか
例:
std::string foo("Baz");
printf("foo contains %s\n",&foo[0]); //Completely safe
C++ 11はstd::string
がnulターミネータを内部的に格納することを保証します。明示的なterminate
メソッドなしでどのように達成できますか?std :: stringはNUL charをどのように追跡するのですか
例:
std::string foo("Baz");
printf("foo contains %s\n",&foo[0]); //Completely safe
標準は、あなたがdata()
から取得した文字列はNULで終了し、the references generated from operator[]
are contiguous and NUL terminatedことを必要とされている必要があります。それはすべての仕様がそれについて言うことです。
これを実行するのは実装の仕事です。通常、文字列の最後にNULターミネータを格納するだけで、実際のバッファサイズは表示されるよりも大きくなります。文字を追加すると、新しく追加された一連の文字の末尾にNULターミネータが格納されます。文字を削除すると、NULターミネータが適切に移動します。
これは、カプセル化されたタイプができることです。彼らは不変量を確立し維持することができます。
私は質問を理解していますか分かりません。あなたは何を意味するのか説明できますか?例えば、なぜ 'terminate'メソッドが必要なのでしょうか? – erip
おそらく最後の文字としてターミネータを持つ、少なくとも 'size()+ 1'文字の配列へのポインタを持っているでしょう。 –
文字列コンストラクタは文字列をコピーし、ヌルターミネータを追加します。 – Dani