Avatar ·

La palabra clave nullptr en C++: en qué es mejor que NULL y cómo usarla correctamente

Hola a todos. Empecé a estudiar C++ recientemente y tengo confusión con los punteros nulos. En libros antiguos y foros a menudo escriben NULL, pero en ejemplos nuevos veo nullptr. Parece que ambos significan "nada" para un puntero, pero el compilador a veces se queja de NULL.

Aquí hay un ejemplo que me confundió. Escribí una función que toma un puntero a int:

void print(int* ptr) {
    if (ptr == NULL) {
        std::cout << "El puntero está vacío" << std::endl;
    } else {
        std::cout << *ptr << std::endl;
    }
}

void print(int value) {
    std::cout << "Número entero: " << value << std::endl;
}

Cuando llamo a print(NULL), el compilador (GCC con la bandera -std=c++17) emite una advertencia o incluso un error, diciendo que la llamada es ambigua. Pero si escribo print(nullptr), todo funciona perfectamente y se llama a la versión con puntero.

Explic