std::string::operator[]境界チェックを行わないものを何度も見てきました。string ::at と string::operator[] の違いは何ですか? operator[]、2013年に尋ねられた、答えはそれが境界チェックをしないと言います。
これに関する私の問題は、[string.access]の標準 (この場合はドラフト N3797 ) を見る場合です。
const_reference operator[](size_type pos) const; reference operator[](size_type pos);
- 必要:
pos <= size().- 戻り値:
*(begin() + pos)の場合pos < size()。charTそれ以外の場合は、 value を持つ型のオブジェクトへの参照を返しますcharT()。オブジェクトを変更すると、未定義の動作が発生します。- スロー:なし。
- 複雑さ:一定時間。
これによりoperator[]、 string または default の要素を返す必要があるかどうかを判断するために、何らかの境界チェックを行う必要があると思いますcharT。この仮定は正しく、operator[]境界チェックを行う必要がありますか?