Ahora tenemos C ++ 11 con muchas características nuevas. Una interesante y confusa (al menos para mí) es la nueva nullptr
.
Bueno, ya no hay necesidad de la desagradable macro NULL
.
int* x = nullptr;
myclass* obj = nullptr;
Aún así, no entiendo cómo nullptr
funciona. Por ejemplo, el artículo de Wikipedia dice:
C ++ 11 corrige esto mediante la introducción de una nueva palabra clave para servir como una constante de puntero nulo distinguido: nullptr. Es del tipo nullptr_t , que es implícitamente convertible y comparable a cualquier tipo de puntero o tipo de puntero a miembro. No es implícitamente convertible o comparable a los tipos integrales, excepto bool.
¿Cómo es una palabra clave y una instancia de un tipo?
Además, ¿tiene otro ejemplo (además del de Wikipedia) en el que nullptr
es superior a los buenos viejos 0
?
nullptr_t
garantiza tener un solo miembro nullptr
? Entonces, si se devuelve una función nullptr_t
, entonces el compilador ya sabe qué valor se devolverá, independientemente del cuerpo de la función.
std::nullptr_t
se puede instanciar, pero todas las instancias serán idénticas nullptr
porque el tipo se define como typedef decltype(nullptr) nullptr_t
. Creo que la razón principal por la que existe el tipo es para que las funciones se puedan sobrecargar específicamente para capturar nullptr
, si es necesario. Ver aquí para un ejemplo.
nullptr
también se utiliza para representar referencias nulas para identificadores administrados en C ++ / CLI.