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

301
28 октября 2017, 17:18

Безопасен ли данный код.

#include <iostream>
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.

Answer 1

Сравнивать указатели можно любые (лишь бы сравнимые :)). Разыменовывать нельзя - но вы этого и не делаете :)

Заметим в скобках, что ваш код - по сути обычная работа с итераторами, именно так, как она обычно реализуется - пока итератор не сравняется с итератором, указывающим за конец контейнера.

READ ALSO
Как заставить Visual Studio работать со свойствами в C++?

Как заставить Visual Studio работать со свойствами в C++?

Visual Studio 2010 на попытку создать свойство у класса пишет:

313
no matching function for call to &#39;MainWindow::connect();

no matching function for call to 'MainWindow::connect();

Есть кнопка в ob_panelui - on_pB_Switch_clicked и элемент в mainwindow

239
Вывод символов с нижним регистром и верхним регистром

Вывод символов с нижним регистром и верхним регистром

Стоит задача, водится строка, при выводе должно быть две строки, одна выводит символы только верхнего регистра, вторая только нижнегоНачал...

497