Agora temos o C ++ 11 com muitos novos recursos. Um interessante e confuso (pelo menos para mim) é o novo nullptr
.
Bem, não há mais necessidade da macro desagradável NULL
.
int* x = nullptr;
myclass* obj = nullptr;
Ainda assim, não estou entendendo como nullptr
funciona. Por exemplo, o artigo da Wikipedia diz:
O C ++ 11 corrige isso introduzindo uma nova palavra - chave para servir como uma constante distinta de ponteiro nulo: nullptr. É do tipo nullptr_t , implicitamente conversível e comparável a qualquer tipo de ponteiro ou tipo de ponteiro para membro. Não é implicitamente conversível ou comparável a tipos integrais, exceto bool.
Como é uma palavra-chave e uma instância de um tipo?
Além disso, você tem outro exemplo (além do da Wikipedia) em que nullptr
é superior ao bom e velho 0
?
nullptr_t
garantido ter apenas um membro nullptr
? Portanto, se uma função retornou nullptr_t
, o compilador já sabe qual valor será retornado, independentemente do corpo da função?
std::nullptr_t
pode ser instanciado, mas todas as instâncias serão idênticas nullptr
porque o tipo é definido como typedef decltype(nullptr) nullptr_t
. Eu acredito que a principal razão pela qual o tipo existe é para que as funções possam ser sobrecarregadas especificamente para captura nullptr
, se necessário. Veja aqui um exemplo.
nullptr
também é usado para representar referência nula para identificadores gerenciados em C ++ / CLI.