Avatar ·

O que é null/nil em C++ e como trabalhar com ele?

Pergunta: O que é null/nil em C++ e como trabalhar com ele?

Colegas, olá! Estou migrando para C++ depois de Python e Java e não consigo entender o conceito de null/nil nesta linguagem. Em Python existe None, em Java — null, e em C++ encontro nullptr, NULL e até 0. São a mesma coisa? Em quais casos usar cada um?

Tentei escrever este código:

#include <iostream>\n\nvoid foo(int* ptr) {\n    if (ptr == NULL) {\n        std::cout << "Pointer is NULL" << std::endl;\n    }\n}\n\nint main() {\n    int* p = nullptr;\n    foo(p);\n    return 0;\n}

O código compila, mas não tenho certeza se está correto. Também ouvi falar sobre std::optional — isso é uma história completamente diferente? Ou é uma substituição moderna para null? Espero obter uma explicação clara: o que entre os listados é o "ponteiro nulo" em C++, como inicializar corretamente ponteiros com "nada", e existe em C++ um análogo de null do Java/Python para referências (não ponteiros)? Agradeço por exemplos com nullptr, NULL.