Раздел §24.1 / 5 стандарта C ++ (2003) гласит:
Так же, как обычный указатель на массив гарантирует, что существует значение указателя, указывающее за последним элементом массива, так и для любого типа итератора существует значение итератора, которое указывает за последний элемент соответствующего контейнера. Эти значения называются значениями после окончания. Значения итератора i, для которого определено выражение * i, называются разыменовываемыми. Библиотека никогда не предполагает, что последние значения могут быть разыменованы. Итераторы также могут иметь особые значения, которые не связаны с каким-либо контейнером. [Пример: после объявления неинициализированного указателя x (как в случае с int * x;) всегда следует предполагать, что x имеет единственное число. значение указателя.] Результаты большинства выражений не определены для сингулярных значений; единственное исключение - это присвоение неособого значения итератору, который содержит единственное значение. В этом случае единственное значение перезаписывается так же, как и любое другое значение. Разыменовываемые значения всегда неособые.
Я не могу понять текст, выделенный полужирным?
- Что такое единственное и несингулярное значение? Как они определены? И где?
- Как и почему разыменовываемые значения всегда неособые?