NULL和nullptr的区别
NULL是什么
NULL
是C++中的一个挺有意思的常量,在我接触的编译器里,它的定义通常都是0。据说也有编译器会将其定义为((void*)0)
。
NULL
,一般我们都将其解释为空,比如指针没有指向的对象,此时指针的值通常就会被赋为NULL
。那其实大多情况下,我们都是更加偏向于认为NULL
和指针类型是相关的,而不会把他往int
类型上去靠。
但是编译器把NULL
解释成0,然后再结合上C++的各种隐式转换,就会有一种很反直觉的行为。
比如void fun(char*)
和void fun(int)
,如果我调用fun(NULL)
,那么实际上编译器会选择调用哪个函数呢?
根据精确匹配,void fun(int)
是最精确的,另一个需要一步隐式转换才能得到,所以编译器会调用void fun(int)
!
指针和整型不存在了(悲
nullptr是什么
C++11针对这个问题,特地引入了一个nullptr
,nullptr
有着自己的确切类型nullptr_t
,再也不会被编译器解释为一个整型0了。nullptr
能够隐式转换成任何指针类型,并且也能和它们进行比较。
不管怎么说,nullptr
在上下文中,总是比NULL
更加容易让人理解,且出人意料的行为肯定更少。
以前使用NULL
的地方,均可以无缝替换成nullptr
,而以后的代码,也请抛弃NULL
改为使用nullptr
,才更符合modern C++的风格。
作者:st0rmKR
出处:https://www.cnblogs.com/st0rmKR/p/17488274.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!