我已经编写 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] 删除。
我来说两句