我已经写 C++ 很多年了,使用 nullptr
对于空指针。我也知道 C,从那里 NULL 起源,并记住它是空指针的常量,类型为 void *
.
出于某些原因,我不得不使用 NULL
在我的 C++ 代码中。好吧,想象一下当在一些模板参数推导过程中编译器告诉我我的 NULL 真的是一个......长时我的惊讶。所以,我仔细检查了:
#include <type_traits>
#include <cstddef>
static_assert(not std::is_same<decltype(NULL), long>::value, "NULL is long ???");
事实上,静态断言失败(使用 GCC 和 Clang)。我查了 cppreference.com ,果然(C++11 措辞):
The macro NULL is an implementation-defined null pointer constant, which may be an integer literal with value zero, or a prvalue of type
std::nullptr_t
.
为什么这是有道理的?就其本身而言,鉴于 C 的不兼容性?
最佳答案
C 不只是简单地定义 NULL
如 (void *)0
.也可以将其定义为 0
或任何计算结果的常量表达式。使用 #define NULL 0
以任何一种语言工作。
关于c++ - 为什么 C++ 的 NULL 通常是整数文字而不是像 C 中的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69057184/