Il C++ linguaggio di programmazione 3a edizione da Stroustrup afferma che,Il confronto tra puntatori è un comportamento non definito o non specificato in C++?
sottrazione di puntatori è definito solo quando entrambi i puntatori indicano elementi dello stesso array (anche se la lingua non ha modo veloce di garantire che è il Astuccio). Quando sottraendo un puntatore da un altro, il risultato è il numero di elementi dell'array tra i due puntatori (un intero). Si può aggiungere un intero a un puntatore o sottrarre un intero da un puntatore; in entrambi i casi, il risultato è un valore puntatore. Se tale valore non indica un elemento dello stesso array come il puntatore originale o uno là, il risultato dell'utilizzo di tale valore è indefinito.
Ad esempio:
void f()
{
int v1 [10];
int v2 [10];
int i1 = &v1[5] - &v1[3]; // i1 = 2
int i2 = &v1[5] - &v2[3]; // result undefined
}
stavo leggendo unspecified behavior su Wikipedia. Si dice che
In C e C++, il confronto dei puntatori agli oggetti è definito solo se i puntatori puntano a membri dello stesso oggetto o elementi della stessa matrice.
Esempio:
int main(void)
{
int a = 0;
int b = 0;
return &a < &b; /* unspecified behavior in C++, undefined in C */
}
Così, mi sono confuso. Quale è corretto? Wikipedia o il libro di Stroustrup? Cosa dice lo standard C++ a riguardo?
mi corregga se sto malinteso qualcosa.
Non vedo i 2 estratti come in conflitto. Puoi chiarire la tua confusione? – Amit
Stroustrup si riferisce al puntatore * sottrazione * (chiamato anche puntatore * differenza *), e l'esempio mostra il calcolo della differenza. L'articolo che stai citando da Wiki si riferisce al puntatore logico * confronto *. – WhozCraig