Condividi tramite


Confronto tra puntatori tramite operatori relazionali

Quando vengono confrontati due puntatori a oggetti dello stesso tipo, il risultato è determinato dalla posizione degli oggetti puntati nello spazio degli indirizzi del programma. I puntatori possono essere confrontati anche con un'espressione costante che restituisce 0 o con un puntatore di tipo void *. Se si confronta un puntatore con un puntatore di tipo void *, il primo puntatore viene convertito nel tipo void * in modo implicito. A questo punto, viene eseguito il confronto.

Non è possibile eseguire il confronto di due puntatori di tipo diverso, tranne nei seguenti casi:

  • Un tipo è un tipo di classe derivato dall'altro tipo.

  • Almeno uno dei puntatori viene convertito in modo esplicito (cast) nel tipo void *. L'altro puntatore viene convertito in modo implicito nel tipo void * per la conversione.

Due puntatori dello stesso tipo che puntano allo stesso oggetto risultano sicuramente uguali. Se due puntatori a membri non statici di un oggetto vengono confrontati, è necessario rispettare le seguenti regole:

  • Se il tipo di classe non è un'unione e se i due membri non sono separati da access-specifier, come pubblico, protetto o privato, il puntatore al membro dichiarato per ultimo risulta maggiore del puntatore al membro dichiarato in precedenza. Per informazioni su access-specifier, vedere la sezione Sintassi in Identificatori di accesso.

  • Se i due membri sono separati da access-specifier, i risultati non sono definiti.

  • Se il tipo di classe è unione, i puntatori a membri dati diversi in tale unione risultano uguali.

Se due puntatori puntano a elementi della stessa matrice o all'elemento uno oltre la fine della matrice, il puntatore all'oggetto con indice maggiore risulta maggiore. Il confronto tra puntatori è sicuramente valido solo quando i puntatori fanno riferimento a oggetti nella stessa matrice o alla posizione uno oltre la fine della matrice.

Vedere anche

Riferimenti

Espressioni con operatori binari