Avatar ·

¿Qué es null/nil en C++ y cómo trabajar con ello?

Pregunta: ¿Qué es null/nil en C++ y cómo trabajar con ello?

¡Colegas, hola! Estoy migrando a C++ después de Python y Java y no puedo entender el concepto de null/nil en este lenguaje. En Python existe None, en Java — null, y en C++ me encuentro con nullptr, NULL, y simplemente 0. ¿Son lo mismo? ¿En qué casos usar cada uno?

Intenté escribir este código:

#include <iostream>

void foo(int* ptr) {
    if (ptr == NULL) {
        std::cout << "Pointer is NULL" << std::endl;
    }
}

int main() {
    int* p = nullptr;
    foo(p);
    return 0;
}

El código compila, pero no estoy seguro de que sea correcto. También he oído sobre std::optional — ¿es algo completamente diferente? ¿O es un reemplazo moderno de null? Espero obtener una explicación clara: ¿cuál de estos es el "puntero nulo" en C++, cómo inicializar correctamente los punteros con "nada", y si existe en C++ un análogo de null de Java/Python para referencias (no punteros)? Agradeceré ejemplos con nullptr, NULL.