Mi stavo chiedendo perché ci sono due modi per specificare un puntatore nullo. Ho esaminato lo link, ma non ho compreso chiaramente il suo utilizzo.nullptr vs __nullptr
Qualcuno può dare un buon esempio di quando utilizzare cosa?
Mi stavo chiedendo perché ci sono due modi per specificare un puntatore nullo. Ho esaminato lo link, ma non ho compreso chiaramente il suo utilizzo.nullptr vs __nullptr
Qualcuno può dare un buon esempio di quando utilizzare cosa?
Il linguaggio C++/CLI aveva già una parola chiave nullptr
dal 2005. Ciò ha causato un problema quando C++ 11 ha adottato la parola chiave nullptr per C++. Ora ce ne sono due, uno per il codice gestito e l'altro per il codice nativo. Il compilatore C++/CLI può compilare entrambi. Quindi devi usare __nullptr quando intendi il puntatore nullo nativo, nullptr quando intendi il puntatore nullo gestito.
Questo è rilevante solo quando si compila con/clr in effetto. Scrivi codice C++/CLI in altre parole. Usa semplicemente nullptr in codice C++.
Se l'ho letto correttamente, è necessario utilizzare nullptr
per i puntatori gestiti e __nullptr
per il puntatore non gestito. Tuttavia, dal momento che nullptr
può essere utilizzato sia per un puntatore non gestito gestito, personalmente non vedo un motivo per utilizzare __nullptr
.
Ma, se si sta compilando con l'opzione/clr, come può sapere il compilatore se si sta utilizzando C++ 11 'nullptr' o C++/CLI' nullptr'? Non può, e questo è il motivo per cui * devi * usare '__nullptr' quando intendi la versione C++ 11 quando stai compilando con l'opzione/clr. –
Il motivo per usare __nullptr è perché se si utilizza nullptr, allora ** non ** sarà mai in grado di attivare C++/CLI e utilizzare .NET. Il che è un grosso svantaggio in termini di utilizzo del codice legacy in futuro. – user3690202
Penso che il bit su/clr sia probabilmente la parte più importante di questa risposta. Se non sei interessato ad agganciare il tuo codice C++ a .NET Framework, dovresti sempre usare 'nullptr'. –
Essendo veramente pedante, era già un problema (anche se raramente rilevante prima) con il porting del codice C++ in C++/CLI prima che esistesse C++ 11. – Deduplicator