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 nullptr
funzioni. 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_t
garantito 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_t
può essere istanziato, ma tutte le istanze saranno identiche nullptr
perché 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.
nullptr
viene utilizzato anche per rappresentare riferimento null per handle gestiti in C ++ / CLI.