С учетом следующего кода:
char buffer[1024];
char * const begin = buffer;
char * const end = buffer + 1024;
char *p = begin + 2000;
if (p < begin || p > end)
std::cout << "pointer is out of range\n";
Хорошо ли определены сравнения (p < begin
и p > end
)? Или этот код имеет поведение undefined, потому что указатель был расширен за конец массива?
Если сравнения хорошо определены, что такое определение?
(дополнительный кредит: оценка самого begin + 2000
поведения undefined?)