2017-02-25 3 views
-2

C++の入門書では、s[s.size()]は予測できないはずです。C++の空の文字列sのs [0]が空文字列なのはなぜですか?

しかし、何度も試してみましたが、他のコードに挿入すると、s[0]は常に空文字列です。しかし、sが空の文字列でない場合、s[size()]にアクセスしようとするとエラーが発生します。

なぜ空の文字列が特別なのですか?

+0

正確には何ですか? – BlueWanderer

+3

質問をより明確に表現してください。 * 's [0]'は常に空文字列です。* 's [0]'は 'char'なので意味がないので、決して空であってもいなくてもなんでもかまいません。 –

+0

英語が私の母国語ではなく、私の国では英語の学習が普遍的ではないので、私の表現がはっきりしないことは残念です。 – RevolverOcelot

答えて

6

文字列のメンバーアクセスは、文字列ではなく文字を生成します。 [operator[](size_type pos)について:]

s[s.size()]あなたは値0を書いていることを提供してもあなたは、 s[s.size()]書き込みすることができます0 C++ 17であることを

C++ 11の保証

pos <= size()が必要です。

*(begin() + pos)の場合、pos < size()の場合。それ以外の場合は、charT()以外の値にオブジェクトを変更すると、定義されていない動作になります。 charTのオブジェクトへの参照がcharT()の値を返します。

charT()が "ゼロ" のstandardeseである。)

前にC++ 17最後の文が "charT()以外の値に" という言葉が含まれていなかったものです。これは過度に制限的でした。正しいサイズの文字列に変換することを禁止します。

関連する問題