Форум программистов, компьютерный форум CyberForum.ru

Инкремент невалидного итератора - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Dll com-совместимая http://www.cyberforum.ru/cpp-beginners/thread381588.html
Подскажите пожалуйста, как в реализации обычная dll отличается от com-совместимой dll?
C++ Timer начало змейки Есть таймер и есть label1 таймер включен в таймере прописано Label1->Left= Left +1; и в результате Label1 перемещаетья примерно на 5 сантиметров влево и все, больше не двигается в чем дело, ведь он должен каждую секунду перемещать на чуть чуть то есть на одну единицу, а он прыгает и замирает. http://www.cyberforum.ru/cpp-beginners/thread381578.html
C++ DbLookUpComboBox
Есть Datasource2 ADOQuery2 , DbLookUpComboBox и база данных в которой 2 параметра это Surname и код (ключевое поле) в свойствах выбрано : в DataSource2 : DataSet-> ADOQuery2 в ADOQuery2 : connection = база данных
C++ Возведение в степень
Дано число n и его нужно возвести в степень s. Можно ли это как-то сделать не используя циклы. Заранее спасибо...
C++ перегрузка операторов http://www.cyberforum.ru/cpp-beginners/thread381571.html
Имеется такая программа: class reversion { vector<int> mass1; vector<int> mass2; vector<int> rev1; vector<int> rev2; vector<int> mult1; vector<int> mult2;
C++ и снова строки Написать программу считывающую текст и выводящую слова, начинающиеся с гласной буквы. подробнее

Показать сообщение отдельно
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
31.07.2012, 13:08     Инкремент невалидного итератора
My bad. Понял.

В любом случае это UB. Мои пруфы:
[lib.iterator.requirements]/5
Just as a regular pointer to an array guarantees that there is a pointer value pointing past the last element of the array, so for any iterator type there is an iterator value that points past the last element of a corresponding container. These values are called past-the-end values. Values of an iterator i for which the expression *i is defined are called dereferenceable. The library never assumes that past-the-end values are dereferenceable. Iterators can also have singular values that are not associated with any container. [ Example: After the declaration of an uninitialized pointer x (as with int* x;), x must always be assumed to have a singular value of a pointer. — end example ] Results of most expressions are undefined for singular values; the only exceptions are destroying an iterator that holds a singular value and the assignment of a non-singular value to an iterator that holds a singular value. In this case the singular value is overwritten the same way as any other value. Dereferenceable values are always non-singular.

[lib.iterator.requirements]/10
An invalid iterator is an iterator that may be singular.

Сноска к нему же: This definition applies to pointers, since pointers are iterators. The effect of dereferencing an iterator that has been invalidated is undefined.
Отсюда следует, что итератор в положении «past-the-end» и итератор, не связанный с каким-либо контейнером (singular; например, итератор от удалённого контейтера) не обязательно являются dereferenceable, а значит могут быть singular, а значит являются invalud, а значит их разыменование и большая часть операций приводят к UB.

Но, как уже говорил, UB — это не взрывать Пентагон (defns.undefined).
 
Текущее время: 13:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru