博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++11空指针: nullptr
阅读量:5255 次
发布时间:2019-06-14

本文共 915 字,大约阅读时间需要 3 分钟。

参考

NULL

在C++中, 经常会用到空指针, 一般用NULL表示空指针, 但是NULL却是这样定义的

#ifndef NULL#ifdef __cplusplus#define NULL    0#else#define NULL    ((void *)0)#endif#endif

也就是说, 在C++中NULL实际上就是整数0.

C++中的`NULL`和C中的不一样的主要原因是C++有重载函数的机制, 如果继续让其支持`void*`的隐形类型转换, 会带来语义二义性的问题.

其实我感觉直接不允许整数和void*的隐形类型转化更方便些吧.

void test(int* ptr);void test(int u);test(NULL);

这样的话就会调用test(u).

nullptr

如何解决这个问题呢?

C++11引入了一个新语法, nullptr表示空指针, 并且不可以转换为整数.
而且NULLnullptr可以交换使用;

int *p1 = NULL;int *p2 = nullptr;if (p1 == nullptr) {} if (p2 == nullptr) {}if (p1 == p2) {}if (p2) {}

模拟实现nullptr

constclass nullptr_t_t{public:    template
operator T* () const { return 0; } template
operator T C::*() const { return 0; }private: void operator& () const;} nullptr_t = {};#undef NULL#define NULL nullptr_t

其实我并不是很看得懂它些的是啥.

大概就是利用类模板将0转化为类的空指针了吧.

转载于:https://www.cnblogs.com/qdscwyy/p/9828644.html

你可能感兴趣的文章
css & input type & search icon
查看>>
jQuery插件开发详细教程
查看>>
Crontab 在linux中的非常有用的Schedule Jobs
查看>>
ProxySQL Scheduler
查看>>
源代码的下载和编译读后感
查看>>
Kafka学习笔记
查看>>
Octotree Chrome安装与使用方法
查看>>
用CALayer实现下载进度条控件
查看>>
Windows 环境下基于 Redis 的 Celery 任务调度模块的实现
查看>>
趣谈Java变量的可见性问题
查看>>
C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
查看>>
ssm框架之将数据库的数据导入导出为excel文件
查看>>
语音识别中的MFCC的提取原理和MATLAB实现
查看>>
验证组件FluentValidation的使用示例
查看>>
0320-学习进度条
查看>>
解决windows系统的oracle数据库不能启动ora-00119和ora-00130的问题
查看>>
ip相关问题解答
查看>>
MetaWeblog API Test
查看>>
反弹SHELL
查看>>
关闭Chrome浏览器的自动更新和升级提示
查看>>