NULL 0 和 nullptr
来源:互联网 发布:淘宝开通花呗怎么收费 编辑:程序博客网 时间:2024/05/22 09:04
有关null nullptr和0之间的关联:
http://www.2cto.com/kf/201302/190008.html
- 1、为什要有nullptr我们给一个指针赋初值的时候一般这么写 FILE* fp = NULL;这里有个NULL的定义,一般情况下它是这么定义的:[cpp]#ifdef __cplusplus#define NULL 0#else#define NULL ((void *)0)#endif在c语言环境下,由于不存在函数重载等问题,直接将NULL定义为一个void*的指针就可以完美的解决一切问题。但是在c++环境下情况就变得复杂起来, 首先我们不能写这样的代码 FILE* fp = (void*)0; 将void*直接赋值给一个指针是不合法的,编译器会报错。 我们只能这样写代码[cpp]FILE* fp = (FILE*)0;// orFILE* fp = 0;所以在c++下面,NULL就被直接定义为一个整型 0。 在大多数情况下这并不会产生什么问题,但是万一有重载或者模板推导的时候,编译器就无法给出正确结果了。比如下面的情形:[cpp]void call_back_process(CCObject* target, void* data);bind(call_back_process, target, NULL); // error 函数类型是void* ,但是我们绑定的是一个整型 02、 nullptr的应用场景:如果我们的编译器是支持nullptr的话,那么我们应该直接使用nullptr来替代NULL的宏定义。正常使用过程中他们是完全等价的。3、模拟nullptr的实现:某些编译器不支持c++11的新关键字nullptr,我们也可以模拟实现一个nullptr[cpp] www.2cto.comconstclass nullptr_t_t{public:template<class T> operator T*() const {return 0;}template<class C, class T> operator T C::*() const { return 0; }private:void operator& () const;} nullptr_t = {};#undef NULL#define NULL nullptr_t
0 0
- NULL 0 和 nullptr
- C++中的NULL、0和nullptr
- NULL,0和nullptr的区别
- c++指针中0,NULL和nullptr
- 讨论nullptr和NULL
- 讨论nullptr和NULL
- 讨论nullptr和NULL
- nullptr和NULL
- NULL和nullptr
- 讨论nullptr和NULL
- NULL 和 nullptr
- NULL和nullptr
- nullptr和NULL
- NULL和nullptr
- 讨论nullptr和NULL
- null 和 nullptr
- NULL、0、nullptr
- NULL、0、nullptr
- Unity3D协程介绍 以及 使用
- SIMOTION D415-2DP控制SIEMENS V70伺服
- 手动创建的数据库,engine恢复时提示修改最大连接数的解决方法
- RTOS 基础入门与UCOSIII移植
- 实战c++中的string系列--string的连接(+= or append or push_back)
- NULL 0 和 nullptr
- 跨浏览器添加事件+跨浏览器移除事件+获取浏览器目标对象+跨浏览器输入文本的光标自动跳转+跨浏览器输入验证+跨浏览器屏蔽
- uva 10163——Storage Keepers
- 交友的基本配置
- inputstream outputstream 区别
- 跨浏览器兼容选择部分文本+跨浏览器获取字符编码
- Android手机平板两不误,使用Fragment实现兼容手机和平板的程序
- 基于rails的schedule网站开发(11):记住我
- PAT已级试题 1009. 说反话