2017-05-27 4 views
0

を保存するための文字列が++操作を実行するときにそれを無効にせずにはstd :: stringクラスからconst_iteratorののスナップショットを作成することが法的です。例えばコピーconst_iteratorの::位置

: 文字列内の位置を保存したい場合ので、私は、現在のconst_iteratorのコピー:

std::string::const_iterator it = prev; 

今私のパーサーは、前の++と続きます。それはまだ有効で、prevの前の位置を指していますか?

+4

@alirakiyan。確かに、それが動作しない場合、彼はそれが役に立たないことを知っています。しかし、それがうまくいくならば、彼は何も知らない - それは安全であるか法的であるか保証されないかもしれない。 –

答えて

3

は、前の前の位置に、それはまだ有効とポイントですか?

はい、限りstd::stringは、それが法的だとイテレータスナップショットがまだ有効である(operator[]またはat()以外の方法で)変更されません。それが起こることを保証しているものを彼に教えてくれませんので

+0

イテレータを無効にすることなく、文字列内の文字を 'operator []'または 'at()'で変更することができます。 –

+0

@ジョンしかし、位置は同じままです。 –

+1

私はイテレータが "文字列が変更されない限り"有効であるというステートメントを緩和しようとしています。文字列が演算子[]またはat()以外の方法で変更されない限り有効です。 –