2011-10-29 11 views
5

Utilizzo di C++ con Visual Studio 2010. Sono in procinto di convertire il mio NULL in nullptr. Con il mio codice questo va bene. Tuttavia, se faccio una chiamata a WinAPI quali:Utilizzo di nullptr nelle chiamate alle funzioni API?

__checkReturn WINOLEAPI OleInitialize(IN LPVOID pvReserved); 

normalmente avrei chiamato questo tipo:

::OleInitialize(NULL); 

Posso tranquillamente usare nullptr dove avrei usato NULL in una chiamata di questo tipo ?

Cioè, posso fare questo:

::OleInitialize(nullptr); 

anche lo stesso con MFC api:

CFileDialog fileDlg(TRUE, ".txt", NULL, 0, strFilter); 

Posso sostituire

CFileDialog fileDlg(TRUE, ".txt", nullptr, 0, strFilter); 

Sto indovinando che posso, ma io voglio solo assicurarmi che non ci siano trucchi.

UPDATE

Così ho passato e sostituisce tutte le mie NULL di con nullptr e sembra funzionare quasi ovunque ma sto ottenendo l'errore sotto sulla riga seguente:

propertyItem = new CMFCPropertyGridProperty(_T("SomeName"), 
"SomeValue", "SomeDescription", nullptr, nullptr, nullptr, nullptr); 

8> c: \ something \ something.cpp (118): errore C2664: 'CMFCPropertyGridProperty :: CMFCPropertyGridProperty (const CString &, const COleVariant & , LPCTSTR, DWORD_PTR, LPCTSTR, LPCTSTR, LPCTSTR)': non possono convertire parametro 4 da 'nullptr' a 'DWORD_PTR' 8> A nullptr nativo può essere convertita bool o utilizzando reinterpret_cast, a un tipo integrale

(Nota CMFCPropertyGridProperty è una classe Microsoft MFC) Che cosa significa?

risposta

12

Sì, è possibile utilizzare in modo sicuro nullptr ovunque si usi NULL.

NULL espanso a un'espressione costante intera con valore zero, che può quindi essere convertito in un valore di puntatore nullo di qualsiasi tipo. nullptr è "pointer literal" che fa esattamente la stessa cosa: converte in un valore di puntatore nullo di qualsiasi tipo.

Ulteriori informazioni here.

+3

Non sono sicuro che sia esattamente vero leggendo [qui] (http://stackoverflow.com/questions/1282295/what-exactly-is-nullptr-in-c0x). Se un NULL è stato collocato in un posto dove dovrebbe essere stato 0 prima di sostituire semplicemente tutto il NULL con nullptr, si romperebbe il codice. Vedo ovunque tutorial che impostano maniglie e tipi di tipi di variabili su NULL. Tipi che non dovrebbero essere assegnati come nullptr. –

+2

@Joe: La premessa della mia risposta è che NULL veniva usato correttamente, nel contesto dei puntatori. – GManNickG

+0

@Gman: Puoi commentare l'aggiornamento alla mia domanda – User