Запрещает ли стандарт C++ разыменование указателя на следующий за последним элементом массива. Если да, то где?
Здравствуйте, Вы писали:
> Запрещает ли стандарт C++ разыменование указателя на следующий
> за последним элементом массива. Если да, то где?
Строго говоря, стандарт не вполне точен в этом отношении
(
http://www.comeaucomputing.com/iso/cwg_active.html#232).
Вернее, как следует из приведенной ссылки, в намерениях комитета было разрешить
непосредственно разыменование указателей на элемент за концом массива (равно как и
нулевых указателей), если результат разыменования не используется; однако актуальный
текст стандарта не отражает это намерение в должной степени. В частности, п. 5.3.1/1
утверждает, что результатом разыменования является lvalue, ссылающееся на объект или
функцию, на которое указывает аргумент операции разыменования. Вполне очевидно, что
указатель на элемент за концом массива (равно как и нулевой указатель) не указывает
ни на какой объект или функцию (точнее, в первом случае
может не указывать).
Соответственно, раз стандарт не предоставляет ясного описания поведения для этого
случая, поведение считается неопределенным (1.3.12: "Undefined behavior may also be
expected when this International Standard omits the description of any explicit
definition of behavior.").
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен