c++指针的使用,在所有教材中都提倡声明的时候要初始化,防止“野指针”,如果不明确该指针指向变量,则直接赋予NULL值。除了NULL之外,C++11新标准中又引入了nullptr来声明一个“空指针”,这样,我们就有下面三种方法来获取一个“空指针”:

如下:

int *t1 = NULL; // 需要引入cstdlib头文件
int *t2 = 0;
int *t3 = nullptr;

为什么C++11要引入nullptr

新标准中建议使用nullptr代替NULL来声明空指针。

1.NULL在C++中的定义:

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

可以看到,在C++中 NULL 被定义为 0 ,而在C中,NULL被定义为((void *)0),即一个void指针。

C++是兼容C的,为什么对于NULL C++却不完全兼容C呢?通过一顿搜索,才知道之所以这样,跟C++的函数重载机制有关。看下面这段代码:

void Fun(char *);
void Fun(int);int main()
{Fun(NULL);
}

如果C++让NULL也支持void *的隐式类型转换,这样编译器应该调用哪一个函数呢。

C++把NULL定义为0,避免了上面的参数匹配问题,但是有引入了新问题,看下面这段代码:

void Fun(char *);
void Fun(int);int main()
{Fun(NULL);  // 调用Func(int)
}

我们经常用NULL来初始化空指针,从传统来说,Fun应该调用的是void Fun(char *)才跟我们的习惯相符,但实际上C++中NULL的值是0,所以实际调用的是void Fun(int);。考虑到如上问题,nullptr关键字被引入了。

请注意区别
NULL只是一个宏定义,而nullptr是一个C++关键字,是std::nullptr_t类型的(constexpr)变量。

nullptr如何使用

nullptr关键字用于标识空指针。它可以转换成任何指针类型和bool布尔类型(主要是为了兼容普通指针可以作为条件判断语句的写法),但是不能被转换为整数。

char *p1 = nullptr;     // 正确
int  *p2 = nullptr;     // 正确

另外需要注意 nullptr与bool的转化,或int的转化,不同的编译器的结果不同,笔者在vs2022上测试时,直接报错:

bool b = nullptr;
int a = nullptr;

error C2440: “初始化”: 无法从“nullptr”转换为“bool”

c++ 11 nullptr相关推荐

  1. C++ 11 nullptr关键字

    C++ 11 nullptr关键字 转载:https://www.cnblogs.com/DswCnblog/p/5629073.html 熟悉C++的童鞋都知道,为了避免"野指针" ...

  2. C++11 nullptr与常量表达式constexpr记录

    1.nullptr (1) nullptr是一个关键字,而nullptr_t是一个类型 typedef decltype(nullptr) nullptr_t 使用nullptr_t类型必须包含#in ...

  3. 在c++11中讨论nullptr和NULL

    C++ 11 nullptr关键字 熟悉C++的童鞋都知道,为了避免"野指针"(即指针在首次使用之前没有进行初始化)的出现,我们声明一个指针后最好马上对其进行初始化操作.如果暂时不 ...

  4. C++11 并发指南一(C++11 多线程初探)

    引言 C++11 自2011年发布以来已经快两年了,之前一直没怎么关注,直到最近几个月才看了一些 C++11 的新特性,今后几篇博客我都会写一些关于 C++11 的特性,算是记录一下自己学到的东西吧, ...

  5. C++11新特性以及std::thread多线程编程

    一 .C++11新特性 1. auto 类型推导 1.1 当=号右边的表达式是一个引用类型时,auto会把引用抛弃,直接推导出原始类型: 1.2 当=号右边的表达式带有const属性时,auto不会使 ...

  6. C++11新特性选讲 语言部分 侯捷

    C++11新特性选讲 语言部分 侯捷 本课程分为两个部分:语言的部分和标准库的部分.只谈新特性,并且是选讲. 本文为语言部分笔记. 语言 Variadic Templates move semanti ...

  7. C++11、C++14、C++17、C++20新特性总结(5万字详解)

    文章目录 C++ 11是什么,C++ 11标准的由来 C++ auto类型推导完全攻略 auto 类型推导的语法和规则 auto 的高级用法 auto 的限制 auto 的应用 使用 auto 定义迭 ...

  8. c语言null和nullptr,nullptr和NULL

    nullptr是c++11中的关键字,表示空指针 要区分nullptr和NULL,首先要明白NULL的含义: NULL是一个宏定义,在c和c++中的定义不同,c中NULL为(void*)0,而c++中 ...

  9. C语言nullptr错误,C ++中的nullptr到底是什么

    对于有经验的C ++和那些了解现代C ++编程语言的人来说,C ++中的nullptr到底是什么,这将是非常简单的问题.但是nullptr不仅是C ++中的编程语言,而且为了解释这一点,我们先了解一下 ...

最新文章

  1. Nginx 缓存命中率
  2. android人脸识别源代码,Android自带的人脸识别
  3. python使用说明书-InfluxDB——python使用手册
  4. nltk.download(“stopwords“)
  5. D3D中的粒子系统(4)
  6. 金融学习纲要与相关知识
  7. [css] 要是position跟display、overflow、float这些特性相互叠加后会怎么样?
  8. LiDAR点云数据处理(TLS/MLS/ALS)
  9. 编译分析:提memcmp.c+gcc四十米大刀到C#世界中屠龙
  10. 前端性能监控方案window.performance 调研(转)
  11. 技嘉主板bios设置内存图解
  12. 计算机复试专业课笔试,关于计算机考研专业课的考试内容
  13. 2022年上海房地产研究报告
  14. 使用Excel中PPMT函数和IPMT函数进行等额本息还款的计算方法
  15. icon小图标集合网站
  16. mysqlfrm初步使用
  17. C语言学习(三)运算符、表达式和语句
  18. 鲁大师发布2022半年报手机UI排行榜:vivo OriginOS成为最流畅UI
  19. 在多线程应用程序中使用循环缓冲区高效地进行日志记录
  20. python google 搜索结果爬取_python爬取百度谷歌搜索结果

热门文章

  1. 分享python爬虫视频教程
  2. 问题 F: 矿物运输
  3. 总结下利用python赚外快的方法,在闲余时间月赚2k~5k
  4. 安卓巴士真诚送上营养丰富的精美Android大餐
  5. 学习笔记(03):学校网管员培训视频教程-以太网的发展
  6. Liblinear机器学习库教程详解(基于Python API)
  7. Matlab:linspace
  8. 海思3716C平台添加m88dc2800+高斯贝尔(EN4020)tuner驱动总结
  9. 密码学报Latex模板使用pdf转换成word
  10. 远程电源管理单元(智能PDU)的发展趋势论述