2011-10-29 25 views
5

在Visual Studio 2010中使用C++。我正在將我的NULL的轉換爲nullptr的過程。用我的代碼這很好。但是,如果我打個電話給WINAPI如:在API函數調用中使用nullptr?

__checkReturn WINOLEAPI OleInitialize(IN LPVOID pvReserved); 

通常我會叫這個名字:

::OleInitialize(NULL); 

我可以放心地使用nullptr在那裏我會在通話中使用了NULL如本?

也就是說,我可以這樣做:

::OleInitialize(nullptr); 

也同樣與MFC API:

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

我能代替

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

我猜我可以,但我只是想確保沒有陷阱。

UPDATE

所以我經歷了,並取代我的所有空與nullptr,似乎大多數工作無處不在但我得到以下行下面的錯誤:

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

8> c:\ something \ something.cpp(118):error C2664: 'CMFCPropertyGridProperty :: CMFCPropertyGridProperty(const CString &,const COleVariant & ,LPCTSTR,DWORD_PTR,LPCTSTR,LPCTSTR,LPCTSTR):nullptr '到 'DWORD_PTR' 8」 不能從轉換參數4'>甲 天然nullptr只能轉換爲bool或使用 的reinterpret_cast,爲整型

(注意:CMFCPropertyGridProperty是一個Microsoft MFC類)那麼這是什麼意思?

回答

12

是的,你可以放心使用nullptr任何地方你使用NULL

NULL擴展爲一個整數常量表達式,其值爲零,然後可以將其轉換爲任何類型的空指針值。 nullptr是完全相同的事物的「指針字面量」:它轉換爲任何類型的空指針值。

更多信息here

+3

我不確定這是完全正確的閱讀[這裏](http://stackoverflow.com/questions/1282295/what-exactly-is-nullptr-in-c0x)。如果NULL被放置在某處,它應該是0之前,而不是用nullptr替換所有的NULL會破壞代碼。我看到無處不在的教程將句柄和各種變量類型設置爲NULL。不應分配爲nullptr的類型。 –

+2

@Joe:我的回答的前提是NULL在指針的上下文中正確使用。 – GManNickG

+0

@Gman:你可以對我的問題的更新發表評論 – User