C ++: Арифметика указателя на указателе, который указывает на разрушенный элемент массива?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C ++: Арифметика указателя на указателе, который указывает на разрушенный элемент массива?

Сообщение Anonymous »

В CppReerference правила для арифметики указателя включают:


, если p указывает на элементы i -th a Array объект x n код> кода> код> код> код> кода> код> код> кода> код> код> код> код> код> код> код> код> код> код> код> код> код> код или вычитается следующим образом:
-p + j и j + p укажите на i + j -th элемент x
if 0 ≤ i + j < /blockquote>

Как указано там, кажется, что арифметика указателя, такую ​​как Ptr+1 < /code> /ptr ++ < /code>, является четко определенной только в том случае, если PTR указывает на элемент массива (или элемент прошлого-конечности того же массива). Мой вопрос: что, если элемент заостренного массива уже был уничтожен до выполнения арифметики? Чтобы быть ясным, я спрашиваю только о арифметическом этапе (продвижение указателя), а не о последующем доступе к уничтоженному объекту. < /P>
Например, < /p>

Код: Выделить всё

template
constexpr // since C++20
void destroy(ForwardIt first, ForwardIt last)
{
for (; first != last; ++first)
std::destroy_at(std::addressof(*first));
}
Это возможная реализация std :: dressome on cppreference, но обратите внимание, что ++ Первый возникает после того, как объект заостренного впалени (его жизнь закончится).
Я задаюсь вопросом, является ли этот указатель арифмет хорошо определяется или не определено (ub). .>

Подробнее здесь: https://stackoverflow.com/questions/797 ... ay-element
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»