您应该将 HMENU 默认为 nullptr 还是 0?

Should you default HMENU to nullptr or 0?

我不清楚。哪个是正确的?

?

Windows API 排在 nullptr 之前。引入 nullptr 的原因是编译器有时会混淆“零整数”和“空指针”。这通常是函数重载的问题。程序员可能还会混淆“零整数”和“空指针”。推荐使用nullptr,否则nullptrNULL0是一回事。

为了让事情更加混乱,一些 Windows 的空句柄是非零值。例如,当函数失败时,CreateFile 的 return 值为 INVALID_FILE_HANDLE。在这种情况下,您必须写 if(hfile != INVALID_FILE_HANDLE){success...}

有人提出的论点是,如果您有写 if(handle) 而不是 if(handle != specific_null_handle) 的习惯,那么当 specific_null_handle 不为零时,您最终会写错代码。否则,就编译器而言,if(handle)if(handle != nullptr) 的代码相同。

为了与WindowsAPI保持一致,您应该写NULL,或者将NULL换成nullptr

为了迂腐,你不应该使用任何一个,而是 HMENU hMenu = NULL;.

  • nullptr 是 C++ 主义,仅在 C++11 中标准化,而 Win32 是 C API 早于 C++11。

  • HMENU是一个不透明的指针,和其他Win32句柄一样,所以NULL0.

    更合适

也就是说,在该语句中使用 NULL0nullptr 中的任何一个最终都会编译为相同的机器代码,并且工作相同。