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