Что такое сингулярные и неособые значения в контексте итераторов STL?

Раздел §24.1 / 5 из стандарта C ++ (2003) гласит:

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

Я не могу понять текст, выделенный жирным шрифтом ?

  • Что такое сингулярное и несингулярное значения? Как они определены? И где?
  • Как и почему разыменяемые значения всегда неособые?
10
задан Nawaz 26 March 2011 в 11:07
поделиться