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针对这个问题,特地引入了一个nullptrnullptr有着自己的确切类型nullptr_t,再也不会被编译器解释为一个整型0了。nullptr能够隐式转换成任何指针类型,并且也能和它们进行比较。
不管怎么说,nullptr在上下文中,总是比NULL更加容易让人理解,且出人意料的行为肯定更少。
以前使用NULL的地方,均可以无缝替换成nullptr,而以后的代码,也请抛弃NULL改为使用nullptr,才更符合modern C++的风格。

作者:st0rmKR

出处:https://www.cnblogs.com/st0rmKR/p/17488274.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   烤肉kr  阅读(84)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示