A comparação de ponteiros é um comportamento indefinido ou não especificado em C ++?
A linguagem de programação C ++, terceira edição da Stroustrup, diz que,
Subtração de ponteiros é definida apenas quando ambos apontam para elementos da mesma matriz (embora a linguagem não tenha uma maneira rápida de garantir que seja esse o caso). Ao subtrair um ponteiro de outro, o resultado é o número de elementos da matriz entre os dois ponteiros (um número inteiro). Pode-se adicionar um número inteiro a um ponteiro ou subtrair um número inteiro de um ponteiro; nos dois casos, o resultado é um valor de ponteiro.Se esse valor não apontar para um elemento da mesma matriz que o ponteiro original ou um além, o resultado do uso desse valor será indefinido.
Por exemplo:
void f ()
{
int v1 [10];
int v2 [10];
int i1 = &v1[5] - &v1[3]; // i1 = 2
int i2 = &v1[5] - &v2[3]; // result undefined
}
Eu estava lendo sobrecomportamento não especificado na Wikipedia. Isso diz que
Em C e C ++, a comparação de ponteiros com objetos é definida estritamente apenas se os ponteiros apontarem para membros do mesmo objeto ou elementos da mesma matriz.
Exemplo:
int main(void)
{
int a = 0;
int b = 0;
return &a < &b; /* unspecified behavior in C++, undefined in C */
}
Então, eu estou confuso. Qual deles está correto? Wikipedia ou livro de Stroustrup? O padrão C ++ diz sobre isso?
Corrija-me Se estou entendendo algo errado.