changkun / modern-cpp-tutorial

📚 Modern C++ Tutorial: C++11/14/17/20 On the Fly | https://changkun.de/modern-cpp/
https://changkun.de/modern-cpp/
MIT License
24.1k stars 3k forks source link

C++ 中不允许将 `NULL` 定义为 `((void*)0)` #274

Closed Mq-b closed 5 months ago

Mq-b commented 6 months ago

nullptr 出现的目的是为了替代 NULL。在某种意义上来说,传统 C++ 会把 NULL、0 视为同一种东西,这取决于编译器如何定义 NULL,*有些编译器会将 NULL 定义为 ((void*)0)*,有些则会直接将其定义为 0。

应该改为

nullptr 出现的目的是为了替代 NULL。C++ 可能会把 NULL、0 视为同一种东西,这取决于编译器如何定义 NULL,宏 NULL 是由实现定义的空指针常量。而值为零的整数字面量就是空指针常量

frederick-vs-ja commented 6 months ago

同时还存在的问题是 NULL 并不是编译器定义的。

Mq-b commented 6 months ago

区分标准库(如主流 libstdc++、MSVC STL、libc++)与编译器,对于不少人来说还是过于复杂了。很多表述的确不严谨,能修改自然更好。