在API函数调用中使用nullptr?

时间:2011-10-29 22:30:48

标签: c++ winapi mfc null nullptr

在Visual Studio 2010中使用C ++。我正在将NULL转换为nullptr。用我的代码这很好。但是,如果我打电话给WINAPI,如:

__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);

我猜我可以,但我只是想确保没有陷阱。

更新

所以我经历了用nullptr替换所有我的NULL,它似乎在所有地方工作,但是我在下面的行中得到以下错误:

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

8> c:\ something \ something.cpp(118):错误C2664:   'CMFCPropertyGridProperty :: CMFCPropertyGridProperty(const CString   &,const COleVariant&,LPCTSTR,DWORD_PTR,LPCTSTR,LPCTSTR,LPCTSTR)':   不能将参数4从'nullptr'转换为'DWORD_PTR'8>一个   native nullptr只能转换为bool或者使用   reinterpret_cast,为整数类型

(注意CMFCPropertyGridProperty是Microsoft MFC类)那么这是什么意思?

1 个答案:

答案 0 :(得分:13)

是的,您可以在使用nullptr的任何地方安全地使用NULL

NULL扩展为整数常量表达式,其值为零,然后可以将其转换为任何类型的空指针值。 nullptr是“指针文字”,完全相同:它转换为任何类型的空指针值。

更多信息here