针对NULL或nullptr的测试:HICON类型变量能否使用nullptr?
HICON变量与nullptr的使用问题
首先直接给结论:HICON类型的变量完全可以使用nullptr——因为HICON本质上是Windows API定义的指针类型(typedef void* HICON;),而C++11引入的nullptr正是用来替代NULL的类型安全空指针常量,它可以隐式转换到任意指针类型,包括HICON。
那你遇到的编译器报错大概率是以下原因之一:
编译器未启用C++11及以上标准:nullptr是C11的新特性,如果你的项目还在使用老的C标准(比如C03),编译器会把nullptr识别为未定义的标识符。解决方法很简单:在项目设置里开启C11或更高版本(比如在Visual Studio中,右键项目→属性→C/C→语言→C标准,选择C++11及以上的选项)。
特殊的类型歧义场景:极少数情况下,如果你遇到的代码中存在重载函数(比如一个接受
int参数,另一个接受HICON参数),用NULL可能会因为NULL被定义为0而匹配到int版本,但nullptr会精准匹配指针类型。不过这种场景比较少见,若真遇到,显式转换一下static_cast<HICON>(nullptr)就能解决。
回到你的代码,把NULL替换成nullptr的写法是完全合规的:
if (m_hStatusBarPageBreakIcon != nullptr) VERIFY(DestroyIcon(m_hStatusBarPageBreakIcon));
只要确保编译器支持C11,这段代码就不会报错,而且比用NULL更类型安全——毕竟NULL在C中本质是整数0,可能在某些场景下引发意外的类型转换问题,而nullptr则专门用于指针类型的空值表示。
内容的提问来源于stack exchange,提问作者Andrew Truckle
相关产品推荐
相关产品推荐

