¿Qué significa que una referencia debe apuntar a un objeto y no a un NULL?

0
0

El siguiente código es ilegal:

 T* p = NULL;
 T& r = *p;  //← ilegal

 

NOTA: Por favor, no me envíe correos electrónicos diciendo que el código anterior funciona en el compilador C++ particular suyo. Sigue siendo ilegal. El lenguaje C++, como se define en el estándar de C++, dice que es ilegal, que establece que es ilegal. El estándar C++ no requiere de un diagnóstico de este error particular, lo que significa que el compilador en particular no está obligado a notar que p es NULL o mostrar un mensaje de error, pero sigue siendo ilegal. El lenguaje C++ también no requiere que el compilador genere código para que el programa explote en tiempo de ejecución. De hecho, la particular versión de su compilador puede, o no, generar código que usted piensa que tiene sentido si escribe lo anterior en un programa. Pero ese es el punto: dado que el compilador no necesariamente va a generar el código sensible, usted no sabe lo que el compilador va a hacer. Así que por favor no me envíe correos electrónicos diciendo que el compilador genera un código particular, bueno, no me importa. Sigue siendo ilegal. Tómese un tiempo para revisar el estándar de C++ en la sección 8.3.2p4.

A modo de ejemplo y no como limitación, un compilador puede optimizar haciendo una prueba de NULL a referencias, ya que «sabe» que todas las referencias deben referir a objetos reales -las referencias no son (legalmente) desreferencias a un puntero NULL. Usted puede ver si su compilador puede hacer eso mediante la siguiente prueba:

 ...del ejemplo anterior...
 T* p2 = &r;
 if (p2 == NULL) {
   ...
 }

 

Como se mencionó anteriormente, esto es sólo un ejemplo de algo que podría escribir para su compilador basado en las reglas del lenguaje que dice que la referencia debe referirse a un objeto válido. No limite su pensamiento para el ejemplo anterior, el mensaje en este punto es que el compilador no está obligado a hacer algo razonable si usted viola las reglas. Así que no se violen las reglas!

Paciente: «Doctor, doctor, mi ojo me duele cuando lo toco con una cuchara».

Doctor: «Entonces deja de usar la cuchara con tu ojo»

 

/*Tomado de C++ FAQ Lite*/

  • You must to post comments
An error occurred while importing content. Error: Class HTML_QuickForm_text does not have a constructor, so you cannot pass any constructor arguments