次のコードがあるとします。
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
) は明確に定義されていますか? それとも、ポインターが配列の末尾を超えて進められているため、このコードの動作は未定義ですか?
比較が明確に定義されている場合、その定義は何ですか?
(追加のクレジット:begin + 2000
それ自体の評価は未定義の動作ですか?)