为什么 C++ 的 NULL 通常是整数文字而不是像 C 中的指针?

燕窝

我已经编写 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 措辞):

宏 NULL 是一个实现定义的空指针常量,它可以是一个值为 0 的整数文字,或者一个类型为 的纯右值std::nullptr_t

为什么这是有道理的?就其本身而言,鉴于 C 的不兼容性?

大卫·索恩利

C 并不简单地定义NULL(void *)0也可以将它定义为0或任何计算它的常量表达式。使用#define NULL 0任何一种语言的作品。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章