Страницы

Поиск по вопросам

четверг, 18 апреля 2019 г.

Безопасное сравнение указателей

Безопасен ли данный код.
#include
int main(int argc, char* argv[] ) { constexpr auto SIZE = 3; int* a1 = new int[3];
a1[0] = 1; a1[1] = 2; a1[2] = 3;
int* first = a1; int* last = a1 + SIZE;
for ( ; first != last; first++) std::cout << *first;
return 0; }
В конце последней итерации first вне диапазона, можно ли так сравнивать указатели. Что будет если first будет равен максимальному size_t.


Ответ

Сравнивать указатели можно любые (лишь бы сравнимые :)). Разыменовывать нельзя - но вы этого и не делаете :)
Заметим в скобках, что ваш код - по сути обычная работа с итераторами, именно так, как она обычно реализуется - пока итератор не сравняется с итератором, указывающим за конец контейнера.

Комментариев нет:

Отправить комментарий