
⚡ CYBER_PROFILE ⚡
/// SYSTEM READY ///
WARNING \]: DETECTING HIGH ENERGY
**🌊 🌉 🌊 心手合一 · 水到渠成**

|------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------|
| **\>\>\> ACCESS TERMINAL \<\<\<** ||
| [**\[ 🦾 作者主页 \]**](https://blog.csdn.net/fengtinghuqu520?spm=1000.2115.3001.5343) | [**\[ 🔥 C语言核心 \]**](https://blog.csdn.net/fengtinghuqu520/category_12955956.html) |
| [**\[ 💾 编程百度 \]**](https://blog.csdn.net/fengtinghuqu520/category_13083835.html) | [**\[ 📡 代码仓库 \]**](https://blog.csdn.net/fengtinghuqu520/article/details/147275999?spm=1001.2014.3001.5502) |
---------------------------------------
Running Process: 100% \| Latency: 0ms
*** ** * ** ***
#### 索引与导读
* [💻NULL 的局限性](#💻NULL 的局限性)
* [C++11引入的nullptr](#C++11引入的nullptr)
* [代码示例](#代码示例)
* [💻结尾--- 核心连接协议](#💻结尾— 核心连接协议)
## 💻NULL 的局限性
`NULL`实际是一个宏,在传统的C头文件`(stddef.h)`中,可以看到如下代码:
```c
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
```
**#ifndef NULL**
如果当前环境中还没有定义过 `NULL`
**#ifdef __cplusplus**
编译器在处理代码时,如果是`C++`环境,会自动定义`__cplusplus`这个**宏**
**代码通过它来决定采用哪种定义方式:**
* 在`C++`中 (`#define NULL 0`): 在`C++`里,指针的类型检查非常严格。在早期的`C++`标准中,`void*` 类型不能像在`C`语言中那样隐式转换为其他类型的指针。因此,将`NULL`直接定义为`整数 0` 是最兼容的做法,`C++` 编译器会自动将字面量`0` 视为空指针。
* 在 C 语言中 `(#else -> #define NULL ((void *)0))`: C 语言允许 `void*` 隐式转换为任意类型的指针。将 `NULL` 定义为 `((void *)0)`(即将地址 `0` 强制转换为无类型指针)更加直观且具备类型安全性,能够明确告诉编译器**这是一个"指针"而非"整数"**

*** ** * ** ***
## C++11引入的nullptr
* `nullptr` 是一个**特殊的关键字**
* `nullptr` 是一种**特殊类型的字面量** ,它可以**转换成任意其他类型的指针类型**
* 使用 `nullptr` 定义**空指针** 可以避免类型转换的问题,因为 `nullptr` **只能被隐式地转换为指针类型,而不能被转换为整数类型**
*** ** * ** ***
## 代码示例
```cpp
#include