book: fix imprecise description of NULL in C++ (#279)

This commit is contained in:
A. Jiang
2024-05-21 05:53:15 +08:00
committed by GitHub
parent ff6ee89e2a
commit bdf0e899a7
2 changed files with 11 additions and 10 deletions

View File

@@ -14,9 +14,9 @@ order: 2
### nullptr
`nullptr` 出现的目的是为了替代 `NULL`在某种意义上来说,传统 C++ 会把 `NULL``0` 视为同一种东西,这取决于编译器如何定义 `NULL`,有些编译器会将 `NULL` 定义为 `((void*)0)`,有些则会直接将其定义为 `0`
`nullptr` 出现的目的是为了替代 `NULL` C 与 C++ 语言中有**空指针常量**,它们能被隐式转换成任何指针类型的空指针值,或 C++ 中的任何成员指针类型的空成员指针值。 `NULL` 由标准库实现提供,并被定义为实现定义的空指针常量。在 C 中,有些标准库会把 `NULL` 定义为 `((void*)0)` 而有些将它定义为 `0`
C++ **不允许**直接将 `void *` 隐式转换到其他类型。但如果编译器尝试把 `NULL` 定义为 `((void*)0)`,那么下面这句代码中:
C++ **不允许**直接将 `void *` 隐式转换到其他类型,从而 `((void*)0)` 不是 `NULL` 的合法实现。如果标准库尝试把 `NULL` 定义为 `((void*)0)`,那么下面这句代码中会出现编译错误
```cpp
char *ch = NULL;