如何解决你应该默认 HMENU 为 nullptr 还是 0?
我不清楚。哪个是正确的?
HMENU hMenu = 0;
HMENU hMenu = nullptr;
?
解决方法
Windows API 出现在 nullptr
之前。引入 nullptr
的原因是编译器有时会混淆“零整数”和“空指针”。这通常是函数重载的问题。程序员也可能在“零整数”和“空指针”之间感到困惑。建议使用 nullptr
,否则 nullptr
、NULL
和 0
是一回事。
为了让事情更加混乱,一些 Windows 的空句柄是非零值。例如,当函数失败时,CreateFile
的返回值为 INVALID_FILE_HANDLE
。在这种情况下,您必须编写 if(hfile != INVALID_FILE_HANDLE){success...}
所提出的论点是,如果您习惯于编写 if(handle)
而不是 if(handle != specific_null_handle)
,那么当 specific_null_handle
不为零时,您最终会编写错误的代码。否则,就编译器而言,if(handle)
与 if(handle != nullptr)
的代码相同。
为了与 Windows API 保持一致,您应该编写 NULL
,或者将 NULL
替换为 nullptr
。
为了迂腐,你应该两者都不使用,而是使用 HMENU hMenu = NULL;
。
-
nullptr
是一种 C++ 主义,仅在 C++11 中进行了标准化,而 Win32 是在此之前的 C API。 -
HMENU
是一个不透明的指针,就像其他 Win32 句柄一样,所以NULL
比0
更合适。
也就是说,在该语句中使用 NULL
、0
或 nullptr
最终将编译为相同的机器代码,并以相同的方式工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。