Avatar ·

A palavra-chave nullptr em C++: como é melhor que NULL e como usar corretamente

Olá a todos. Comecei a estudar C++ recentemente e fiquei confuso com ponteiros nulos. Em livros antigos e fóruns, frequentemente escrevem NULL, mas em exemplos novos vejo nullptr. Ambos parecem significar "nada" para um ponteiro, mas o compilador às vezes reclama do NULL.

Aqui está um exemplo que me confundiu. Escrevi uma função que aceita um ponteiro para int:

void print(int* ptr) {
    if (ptr == NULL) {
        std::cout << "Ponteiro vazio" << std::endl;
    } else {
        std::cout << *ptr << std::endl;
    }
}

void print(int value) {
    std::cout << "Inteiro: " << value << std::endl;
}

Quando chamo print(NULL), o compilador (GCC com a flag -std=c++17) emite um aviso ou até um erro, dizendo que a chamada é ambígua. Mas se escrevo print(nullptr), tudo funciona perfeitamente e a versão com ponteiro é chamada.

Explic