Ora abbiamo C ++ 11 con molte nuove funzionalità. Uno interessante e confuso (almeno per me) è il nuovo nullptr.
Bene, non c'è più bisogno della brutta macro NULL.
int* x = nullptr;
myclass* obj = nullptr;
Tuttavia, non capisco come nullptrfunzioni. Ad esempio, l' articolo di Wikipedia dice:
C ++ 11 corregge questo problema introducendo una nuova parola chiave da utilizzare come costante puntatore nullo distinto: nullptr. È di tipo nullptr_t , che è implicitamente convertibile e confrontabile con qualsiasi tipo di puntatore o tipo puntatore a membro. Non è implicitamente convertibile o paragonabile a tipi integrali, ad eccezione di bool.
Come è una parola chiave e un'istanza di un tipo?
Inoltre, hai un altro esempio (oltre a quello di Wikipedia) dove nullptrè superiore al buon vecchio 0?
nullptr_tgarantito un solo membro nullptr,? Quindi, se viene restituita una funzione nullptr_t, il compilatore sa già quale valore verrà restituito, indipendentemente dal corpo della funzione?
std::nullptr_tpuò essere istanziato, ma tutte le istanze saranno identiche nullptrperché il tipo è definito come typedef decltype(nullptr) nullptr_t. Credo che il motivo principale per cui esiste il tipo sia che le funzioni possano essere sovraccaricate specificamente per essere catturate nullptr, se necessario. Vedi qui per un esempio.
nullptrviene utilizzato anche per rappresentare riferimento null per handle gestiti in C ++ / CLI.