Что произойдет, если я буду увеличивать итератор?

У меня простой вопрос: что произойдет, если я продолжу увеличивать итератор, когда он достигнет конца () (одного за последним) контейнера STL C ++? например

set<int> intSet;
intSet.insert(0);
intSet.insert(1);
intSet.insert(2);
set<int>::iterator setIter = intSet.begin();
for (int i = 0; i < 10; i++)
  setIter++;

Итак, будет ли setIter всегда intSet.end ()? или это неопределенное поведение (может дать мне непоследовательный мусор)?


person user3277360    schedule 24.04.2014    source источник
comment
@Tahlil Вероятно, он боится нанести ущерб вселенной, потому что мы не можем знать, что произойдет.   -  person Ivan Aksamentov - Drop    schedule 24.04.2014
comment
@Tahlil только потому, что он может работать, не означает, что он будет работать гарантированно.   -  person Joe    schedule 24.04.2014
comment
@Joe Целью моего вопроса было то, что он рассказал нам, какое исследование он провел, прежде чем задавать вопрос. Ничего больше :)   -  person Tahlil    schedule 24.04.2014


Ответы (2)


Простое увеличение его значения ничего не сделает, по крайней мере, в компиляторах GNU.

Если вы попытаетесь разыменовать его, это вызовет неопределенное поведение.

См. этот вопрос для более подробного обсуждения.

person merlin2011    schedule 24.04.2014
comment
Спасибо, да, я знаю, что не следует разыменовывать его. Мне просто нужно знать, может ли это дать мне последовательное поведение. Похоже, что не будет, если я буду использовать разные компиляторы. - person user3277360; 24.04.2014

Это вызовет ошибку времени выполнения в VS2013. Однако этого не будет в G ++ (ideone). Однако это неопределенное поведение, если вы когда-либо его использовали. Это определенно не равно intSet.end()

person yizzlez    schedule 24.04.2014