【问题标题】:Using nullptr in API function calls?在 API 函数调用中使用 nullptr?
【发布时间】:2011-12-18 00:45:33
【问题描述】:

在 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)' : 无法将参数 4 从 'nullptr' 转换为 'DWORD_PTR' 8> A 本机 nullptr 只能转换为 bool 或,使用 reinterpret_cast,转为整型

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

【问题讨论】:

    标签: c++ winapi mfc null nullptr


    【解决方案1】:

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

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

    更多信息here

    【讨论】:

    • 阅读here,我不确定这是否完全正确。如果 NULL 被放置在某个地方,它应该是 0,而不是仅仅用 nullptr 替换所有 NULL 会破坏代码。我到处都能看到将句柄和各种变量类型设置为 NULL 的教程。不应分配为 nullptr 的类型。
    • @Joe:我回答的前提是在指针上下文中正确使用了 NULL。
    • @User:这可能会造成混淆,但DWORD_PTR 不是指针类型,而是整数。这意味着,正如@JoeMcGrath 指出的那样,您需要在这种情况下使用0,而不是nullptr
    猜你喜欢
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 2020-03-07
    • 1970-01-01
    • 2021-08-25
    • 2018-12-25
    • 2019-04-20
    相关资源
    最近更新 更多