您应该将 HMENU 默认为 nullptr 还是 0?
Should you default HMENU to nullptr or 0?
我不清楚。哪个是正确的?
HMENU hMenu = 0;
HMENU hMenu = nullptr;
?
Windows API 排在 nullptr
之前。引入 nullptr
的原因是编译器有时会混淆“零整数”和“空指针”。这通常是函数重载的问题。程序员可能还会混淆“零整数”和“空指针”。推荐使用nullptr
,否则nullptr
、NULL
、0
是一回事。
为了让事情更加混乱,一些 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;
.
也就是说,在该语句中使用 NULL
、0
或 nullptr
中的任何一个最终都会编译为相同的机器代码,并且工作相同。
我不清楚。哪个是正确的?
HMENU hMenu = 0;
HMENU hMenu = nullptr;
?
Windows API 排在 nullptr
之前。引入 nullptr
的原因是编译器有时会混淆“零整数”和“空指针”。这通常是函数重载的问题。程序员可能还会混淆“零整数”和“空指针”。推荐使用nullptr
,否则nullptr
、NULL
、0
是一回事。
为了让事情更加混乱,一些 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;
.
也就是说,在该语句中使用 NULL
、0
或 nullptr
中的任何一个最终都会编译为相同的机器代码,并且工作相同。