前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++ 04 - nullptr

C++ 04 - nullptr

作者头像
Reck Zhang
发布2021-08-11 11:50:56
1820
发布2021-08-11 11:50:56
举报
文章被收录于专栏:Reck Zhang

nullptr

整数用0, 实数用0.0, 指针用nullptr, 字符串用'\0'.

在标识地址(指针)的时候, C++11往后的项目用nullptr, C++0x项目则用NULL, 毕竟这看起来更像是指针.

因为在C++的基本观点上来看, 0的型别是int, 而非指针. 至于说NULL, 不同的编译器实现各不相同, 并非都是int的整形型别(如long). 事实上不管实现的细节如何, 关键在于0NULL都不具备指针型别.

举个例子:

代码语言:javascript
复制
// 1
void f(int);

// 2
void f(bool);

// 3
void f(void*);

f(0);

f(NULL);

如果我们向这样的重载函数传递的时候, 就永远不会调到第三种函数.

f(NULL)的不确定性是NULL的型别在实现中的余地的一种反应. 假设NULL的定义为0L, 那么这个调用就有了多义性. 因此从long到int, 从long到bool, 还有从0L到void*的型别转换都是允许的.

nullptr的优点在于, 它不具备整形型别. 事实上nullptr的型别是std::nullptr_t, 他可以隐式转换到所有的裸指针型别.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-12-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • nullptr
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档