在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类)那么这是什么意思?
答案 0 :(得分:13)
是的,您可以在使用nullptr
的任何地方安全地使用NULL
。
NULL
扩展为整数常量表达式,其值为零,然后可以将其转换为任何类型的空指针值。 nullptr
是“指针文字”,完全相同:它转换为任何类型的空指针值。
更多信息here。