c++ - español - ¿Cuáles son los usos del tipo `std:: nullptr_t`?
que es null c++ (2)
Aprendí que nullptr
, además de ser convertible a cualquier tipo de puntero (pero no a cualquier tipo integral) también tiene su propio tipo std::nullptr_t
. Por lo tanto, es posible tener una sobrecarga de método que acepte std::nullptr_t
.
¿Exactamente por qué se requiere tal sobrecarga?
Hay algunos casos especiales que la comparación con un tipo nullptr_t
es útil para indicar si un objeto es válido.
Por ejemplo, el operator==
y el operator!=
Sobrecargas de std::function
solo podrían tomar nullptr_t
como parámetro para indicar si el objeto de función está vacío. Para más detalles puedes leer esta pregunta .
Si más de una sobrecarga acepta un tipo de puntero, es necesaria una sobrecarga para std::nullptr_t
para aceptar un argumento nullptr
. Sin la sobrecarga std::nullptr_t
, sería ambiguo qué sobrecarga de punteros debería seleccionarse cuando se pasa nullptr
.
Ejemplo:
void f(int *intp)
{
// Passed an int pointer
}
void f(char *charp)
{
// Passed a char pointer
}
void f(std::nullptr_t nullp)
{
// Passed a null pointer
}