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[]
境界チェックを行う必要がありますか?