io cosa commento originale di Gman dovrebbe essere la risposta accettata:
Mi chiedo cosa c'è di sbagliato con solo if (p)
Il punto è: nulla è sbagliato con esso, e questo dovrebbe essere il modo preferito. Innanzitutto, !!p
è "troppo intelligente"; è anche completamente inutile e quindi negativo (nota: stiamo parlando di puntatori in una dichiarazione if
qui, quindi il commento di Anacrolix, sebbene generalmente valido, non si applica qui!).
Lo stesso vale per p != NULL
. Mentre questo è possibile, non è solo necessario. È più codice, è completamente ridondante codice e quindi peggiora il codice. La cosa più vera che Jeff Atwood ha mai detto è che "il miglior codice non è affatto codice". Evita la sintassi ridondante. Attenersi al minimo (che trasmette ancora il significato completo: if (p)
è completato).
Infine, if (p)
è probabilmente il modo più idiomatico per scrivere questo in C++. C++ si piega all'indietro per ottenere lo stesso comportamento per altri tipi nella lingua (ad esempio flussi di dati), al costo di alcune stranezze molto strane. La prossima versione dello standard introduce anche una nuova sintassi per ottenere questo comportamento nei tipi definiti dall'utente.
Per i puntatori, otteniamo lo stesso gratuitamente. Quindi usalo.
/EDIT: A proposito di chiarezza: sharptooth scrive che
IMO confrontando contro puntatore nullo è più chiaro.
Io sostengo che questo è oggettivamente sbagliato: if (p)
è più chiaro. Non c'è modo che questa affermazione possa significare altro, né in questo contesto né in nessun altro, in C++.
fonte
2009-10-22 09:48:14
Mi chiedo cosa c'è che non va con 'if (p)'. – GManNickG
Assolutamente nulla. :) – Twisol
Si dovrebbe sempre sospettare che gli operatori siano sovraccarichi. È possibile che '! P' o'! = 'Abbiano comportamenti speciali. – Kobi