estaba leyendo el C++ FAQ - "8.6 - When should I use references, and when should I use pointers?" y, en particular, esta declaración:¿Por qué no hay "referencia NULL" en C++?
Utilizar referencias cuando se puede, y los punteros cuando tienen que hacerlo.
...
La excepción a lo anterior es que el valor del parámetro o el retorno de una función necesita un "centinela" de referencia - una referencia que no se refiere a un objeto. Por lo general, esto se realiza mejor al devolver/tomar un puntero y al darle al puntero NULL este significado especial (las referencias siempre deben tener alias de objetos, no un puntero NULL sin referencias).
Por lo que he visto, la necesidad de una referencia "centinela" es a menudo la razón para usar punteros en lugar de referencias. Lo que me pregunto es: ¿por qué C++ no tiene un "valor nulo" especial para las referencias? Parece que haría los punteros casi innecesarios, lo que resolvería muchos problemas.
¿Por qué no era parte de la especificación del lenguaje?
Editar:
No estoy seguro de que mi pregunta es clara - Supongo que no estoy pidiendo literalmente sobre referencias nulas. Muy a menudo leo que en C++ "la referencia es el objeto". Y, en la mayoría de los lenguajes de OOP, los objetos pueden ser NULL - Pascal, C#, Java, JavaScript, PHP, etc. en todos estos puede hacer someObject = null
o someObject := nil
. De hecho, Pascal también admite punteros pero aún permite que los objetos sean nil
, ya que tiene su uso. Entonces, ¿por qué C++ es de alguna manera especial y no tiene un objeto NULL? ¿Fue solo un descuido o una decisión real?
Pray decir cómo eso eliminaría la necesidad de punteros? –
@nathanwhite Porque entonces las referencias serían azúcar sintáctico para punteros, presumiblemente, que podrían usarse siempre que los punteros lo sean. Lo cual, IMO, eliminaría por completo algunos de los beneficios de las referencias. – hvd
Leer [¿Por qué C++ tiene punteros y referencias?] (Http://www2.research.att.com/~bs/bs_faq2.html#pointers-and-references) y [C++: referencia nula] (http://stackoverflow.com/questions/4364536/c-null-reference). –