Безопасен ли данный код.
#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.
Ответ
Сравнивать указатели можно любые (лишь бы сравнимые :)). Разыменовывать нельзя - но вы этого и не делаете :)
Заметим в скобках, что ваш код - по сути обычная работа с итераторами, именно так, как она обычно реализуется - пока итератор не сравняется с итератором, указывающим за конец контейнера.
Комментариев нет:
Отправить комментарий