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 nullptrfunciona. 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_tgarantido 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_tpode ser instanciado, mas todas as instâncias serão idênticas nullptrporque 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.
nullptrtambém é usado para representar referência nula para identificadores gerenciados em C ++ / CLI.