在API函数调用中使用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>一个 本机 nullptr 只能转换为 bool 或,使用 reinterpret_cast,转换为整型
(注意 CMFCPropertyGridProperty 是 Microsoft MFC 类) 那么这是什么意思?
Using C++ with Visual Studio 2010. I'm in the process of converting my NULL
's to nullptr
's. With my code this is fine. However if I make a call to WINAPI such as:
__checkReturn WINOLEAPI OleInitialize(IN LPVOID pvReserved);
normally I would have called this like:
::OleInitialize(NULL);
Can I safely use nullptr
where I would have used NULL
in a call such as this?
That is, can I do this:
::OleInitialize(nullptr);
Also same with MFC api:
CFileDialog fileDlg(TRUE, ".txt", NULL, 0, strFilter);
Can I replace
CFileDialog fileDlg(TRUE, ".txt", nullptr, 0, strFilter);
I'm guessing I can but I just want to make sure there are no gotchas.
UPDATE
So I went through and replaces all my NULL's with nullptr and it seems to work most everywhere however I am getting the below error on the following line:
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)' :
cannot convert parameter 4 from 'nullptr' to 'DWORD_PTR' 8> A
native nullptr can only be converted to bool or, using
reinterpret_cast, to an integral type
(Note CMFCPropertyGridProperty is a Microsoft MFC class) So what does that mean?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
是的,您可以在任何使用
NULL
的地方安全地使用nullptr
。NULL
扩展为值为零的整数常量表达式,然后可以将其转换为任何类型的空指针值。 nullptr 是“指针文字”,它执行完全相同的操作:它转换为任何类型的空指针值。更多信息请点击此处。
Yes, you can safely use
nullptr
anywhere you useNULL
.NULL
expanded to an integer constant expression with the value zero, which could then be converted to a null pointer value of any type.nullptr
is "pointer literal" that does the exact same thing: it converts to a null pointer value of any type.More information here.