I cosa comentario original del GMan debe ser la respuesta aceptada:
Me pregunto lo que está mal con sólo if (p)
El punto es: nada está mal con él, y esto debe sea la forma preferida. En primer lugar, !!p
es "demasiado inteligente"; también es completamente innecesario y, por lo tanto, malo (aviso: estamos hablando de apuntadores en una declaración if
aquí, por lo que el comentario de Anacrolix, aunque es válido en general, no se aplica aquí).
Lo mismo ocurre con p != NULL
. Si bien esto es posible, simplemente no es necesario. Es más código, es completamente código redundante y, por lo tanto, empeora el código. Lo más sincero que dijo Jeff Atwood fue que "el mejor código no es código en absoluto". Evite la sintaxis redundante. Atenerse al mínimo (que todavía transmite el significado completo; if (p)
es completo).
Finalmente, if (p)
es posiblemente la forma más idiomática de escribir esto en C++. C++ hace lo imposible para obtener este mismo comportamiento para otros tipos en el lenguaje (por ejemplo, flujos de datos), a costa de algunos caprichos extraños. La próxima versión de la norma incluso introduce una nueva sintaxis para lograr este comportamiento en los tipos definidos por el usuario.
Para los punteros, obtenemos lo mismo de forma gratuita. Entonces úsalo.
/EDIT: Acerca de la claridad: sharptooth escribe que
OMI comparando contra el puntero nulo es más clara.
Yo afirmo que esto es objetivamente incorrecto: if (p)
es más claro. No hay forma posible de que esta declaración pueda significar algo más, ni en este contexto ni en ningún otro, en C++.
Me pregunto qué pasa con solo 'if (p)'. – GManNickG
Absolutamente nada. :) – Twisol
Siempre debe sospechar que los operadores están sobrecargados. Es posible '! P' o'! = 'Tener comportamientos especiales. – Kobi