このページに関してのお問い合わせはこちら
【注意】STLの落とし穴【危険】
ツイート
78
:
デフォルトの名無しさん
:
2005/06/04(土) 22:24:24
>>74-77
vect.empty() ならば vect[0] の時点で未定義動作。
23.1.1/12 で a[n] は *(a.begin() + n) と定義されている。
23.1/7 により、 a.empty() のとき a.begin() == a.end() であり、
この値はコンテナに対する "past-the-end" と呼ばれる値になる。
24.1/5 により "past-the-end" は "dereferencable" ではない。
24.1.1/2 の票にイテレータ a に対する *a の事前条件として
a が "dereferencable" であることが挙げられている。
(ちなみに、 a が "dereferencable" であることは a + n を定義するための事前条件でもある。)
事前条件を満たさないことになるので、未定義動作となる。
(最後1行だけ、規格中に明らかな記述を見つけられなかった。17.4.3.7かな?)
ttp://www.kuzbass.ru/docs/isocpp/lib-containers.html#lib.sequence.reqmts
ttp://www.kuzbass.ru/docs/isocpp/lib-iterators.html#lib.iterator.requirements
79
:
デフォルトの名無しさん
:2005/06/04(土) 22:51:51
>>74-77
http://pc2.2ch.net/tech/kako/1037/10377/1037795348.html
ここの 603-