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 nullptrfunciona. 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 nullptres superior a los buenos viejos 0?
nullptr_tgarantiza 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_tse puede instanciar, pero todas las instancias serán idénticas nullptrporque 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.
nullptrtambién se utiliza para representar referencias nulas para identificadores administrados en C ++ / CLI.