在API函数调用中使用nullptr?

Use*_*ser 6 c++ null winapi mfc nullptr

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

__checkReturn WINOLEAPI OleInitialize(IN LPVOID pvReserved);
Run Code Online (Sandbox Code Playgroud)

通常我会称之为:

::OleInitialize(NULL);
Run Code Online (Sandbox Code Playgroud)

我可以安全地使用nullptrNULL在这样的电话中使用的地方吗?

也就是说,我可以这样做:

::OleInitialize(nullptr);
Run Code Online (Sandbox Code Playgroud)

与MFC api一样:

CFileDialog fileDlg(TRUE, ".txt", NULL, 0, strFilter);
Run Code Online (Sandbox Code Playgroud)

我可以更换吗?

CFileDialog fileDlg(TRUE, ".txt", nullptr, 0, strFilter);
Run Code Online (Sandbox Code Playgroud)

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

UPDATE

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

propertyItem = new CMFCPropertyGridProperty(_T("SomeName"),
"SomeValue", "SomeDescription", nullptr, nullptr, nullptr, nullptr);
Run Code Online (Sandbox Code Playgroud)

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

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

GMa*_*ckG 13

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

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

更多信息在这里.

  • @User:这可能会令人困惑,但`DWORD_PTR`不是指针类型,而是整数.这意味着,正如@JoeMcGrath指出的那样,你需要在该上下文中使用`0`,而不是`nullptr`. (6认同)
  • 我不确定阅读[这里](http://stackoverflow.com/questions/1282295/what-exactly-is-nullptr-in-c0x)是完全正确的.如果将NULL放在某个地方,那么它应该是0,而不是用nullptr替换所有NULL会破坏代码.我看到无处不在的教程将句柄和各种变量类型设置为NULL.不应指定为nullptr的类型. (3认同)
  • @Joe:我的答案的前提是在指针的上下文中正确使用了NULL. (2认同)