11

在 Visual Studio 2010 中使用 C++。我正在将我NULL的 's 转换为nullptr's。使用我的代码,这很好。但是,如果我调用 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)' : 无法从 'nullptr 转换参数 4 ' to 'DWORD_PTR' 8> 原生 nullptr 只能转换为 bool 或使用 reinterpret_cast 转换为整数类型

(注意 CMFCPropertyGridProperty 是一个 Microsoft MFC 类)那是什么意思呢?

4

1 回答 1

17

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

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

更多信息在这里

于 2011-10-29T22:33:39.113 回答