Partilhar via


Comparando ponteiros usando operadores relacionais

Quando dois ponteiros para objetos do mesmo tipo são comparados, o resultado é determinado pelo local dos objetos apontados no espaço de endereço do programa. Os ponteiros também podem ser comparados a uma expressão constante que é avaliada como 0 ou a um ponteiro do tipo nulo *. Se uma comparação de ponteiros for feita em relação a um ponteiro do tipo nulo *, o outro ponteiro será convertido implicitamente no tipo nulo *. Então, a comparação será feita.

Dois ponteiros de tipos diferentes não podem ser comparados, a menos que:

  • Um tipo é um tipo de classe derivado de outro tipo.

  • Pelo menos um dos ponteiros é convertido explicitamente (conversão) no tipo nulo *. (O outro ponteiro é implicitamente convertido no tipo nulo * para a conversão.)

Dois ponteiros do mesmo tipo que apontam para o mesmo objeto são obrigatoriamente comparados como iguais. Se dois ponteiros para membros não estáticos de um objeto são comparados, as seguintes regras se aplicam:

  • Se o tipo de classe não é uma união e se os dois membros não são separados por um access-specifier, como público, protegido ou particular, o ponteiro para o membro declarado por último será comparado como maior do que o ponteiro para o membro declarado anteriormente. (Para obter informações sobre access-specifier, consulte a seção Sintaxe em Especificadores de acesso.)

  • Se os dois membros são separados por um access-specifier, os resultados são indefinidos.

  • Se o tipo de classe for uma união, os ponteiros para membros de dados diferentes nessa união serão comparados como iguais.

Se dois ponteiros apontarem para elementos da mesma matriz ou para o elemento além do final da matriz, o ponteiro para o objeto com o subscrito mais alto será comparado como superior. A comparação dos ponteiros é garantida como válida somente quando os ponteiros se referem a objetos na mesma matriz ou ao local após o término da matriz.

Consulte também

Referência

Expressões com operadores binários