一、C++11 引入的nullptr
C语言中的NULL
- NULL用来标记空指针
- NULL在C和C++中的定义不同,因为C++不允许(void*)隐式转为(int*)等指针类型
- C++中也可以继续用NULL,但是因为函数重载的引入,NULL传参会带来歧义。比如2个重载函数:void func(int* a); 和 void func(char* c);
- C语言中NULL就是 (void*)0; C++语言中NULL就是0
NULL和nullptr的区别
- NULL是个宏定义,而nullptr是个关键字
- NULL本质是一个数字0,而nullptr本质是一个指针类型
- nullptr就是一个可以绕过C++严格的类型检查的NULL,就是因为C++不允许int* p = (void*)0 这样,所以才有了nullptr
nullptr如何工作
- nullptr传参,表示真正的空指针
- nullptr的本质:
const class nullptr_t{ public: template<class T> inline operator T*()const {return 0;} template<class C, class T> inline operator T C::*() const {return 0;} private: void operator&() const; } nullptr={};
nullptr的评价
- C++11 开始使用,
- 实践中在判断野指针时很多人还是喜欢使用 if(!p) ,历史遗留原因…
- nullptr无法解

本文介绍了C++11引入的 nullptr,它作为安全的空指针常量,解决了C++中NULL可能导致的类型转换问题。同时讲解了静态断言的概念,包括C中的assert与C++的static_assert,强调了static_assert在编译时进行类型检查的重要性。

被折叠的 条评论
为什么被折叠?



