С++ какой результат итератора + целое число, когда прошлое-итератор?
предположим, что у вас есть итератор с произвольным доступом (например, std::vector myVector)
когда iter + someInt является обратным итератором,
iter + someInt == myVector.end()??
или может быть другое значение, чем myVector.end()?
Ответ 1
Это Undefined Поведение. Все может случиться. Просто для того, чтобы назвать несколько параметров: ничего не происходит, выходы программы, исключение, сбой.
Ответ 2
Это поведение undefined, в стандарте ничего не говорится об итогах этого.
Ответ 3
Это вызовет поведение undefined в соответствии со стандартом С++ (2003).
Ответ 4
Результат undefined по стандарту С++.
Ответ 5
Как это верно, это приводит к поведению undefined (см. другие ответы) после стандарта С++, иногда это currios, что на самом деле произойдет?
На самом деле, это часто не является мистическим вообще и довольно ясно, что произойдет, однако оно зависит от используемого компилятора и его версии, а также от ее стандартных библиотек и флагов компилятора и вашей ОС.
Это также означает, что вы абсолютно не должны зависеть от него (например, следующая версия компилятора может изменить поведение).
По вашему вопросу (вы не должны полагаться на следующее):
В текущих компиляторах (gcc, msvc, intel С++ компилятор) a std::vector имеет обычно (по крайней мере) два члена:
T* _begin_; // pointing to begin of array of vector
T* _end_; // pointing to end(), note that array might be larger due to reserve()
Таким образом, вы обычно получаете указатель за пределами конца: ничего не значит. Часто вы можете легко разыменовать его (либо потому, что массив больше, чем
_end_-_begin_
или потому, что программа памяти может получить доступ к памяти. Конечно, содержимое может быть мусором).
Если вам действительно интересно, посмотрите на код ассемблера (с оптимизациями и без).