Является ли указатель "один-на-конец" типа не-массива допустимым понятием в С++? - программирование
Подтвердить что ты не робот

Является ли указатель "один-на-конец" типа не-массива допустимым понятием в С++?

В стандарте С++ [с 5.7] говорится:

Если оба операнда указателя и результат указывают на элементы одного и того же объекта массива или одно прошлое последний элемент объекта массива, оценка не должна приводить к переполнению; в противном случае поведение undefined.

Итак, могу ли я исходить из предположения, что указатели одного конца прошлого типа, кроме массивов, undefined?

Например:

int a = 0;
vector<int> v(&a, (&a)+1);

Вышеприведенный фрагмент компилируется и работает просто отлично (с g++), но действительно ли он?

4b9b3361

Ответ 1

Нет, это законно. 5.7 (4) - один абзац перед вашей цитатой - говорит: "Для целей этих операторов указатель на объект nonarray ведет себя так же, как указатель на первый элемент массива длиной один с типом объекта как его тип элемента. "