在API函数调用中使用nullptr?

发布于 2024-12-12 19:30:28 字数 1287 浏览 3 评论 0原文

在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

小姐丶请自重 2024-12-19 19:30:28

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

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

更多信息请点击此处

Yes, you can safely use nullptr anywhere you use NULL.

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文