C++ 标准将空指针定义为0
。然而,在很多代码中,我看到使用了 NULL
宏。
为什么会这样?如果标准将 NULL
定义为 0
,为什么要为其使用特殊常量?
这只是一种审美选择,还是有更实际的原因?或者过去是否存在不再有效的原因,即旧版 C++ 标准草案的遗留问题?
如何以及为何开始使用 NULL
而不是 0
?
最佳答案
这是 C 的遗留问题,其中 NULL
通常定义为 (void*)0
。在 C 中,由于转换规则,它使 NULL
可隐式转换为任何其他指针类型,同时保持不可转换为整数类型:
int* a = NULL; /* OK */
int b = NULL; /* ERROR */
C++ 然而没有这种松散的类型转换,因此 NULL
在 C++ 中被定义为 0
。虽然这意味着 int b = NULL;
是合法的,但编译器通常足够聪明,可以在您这样做时发出警告,因为它们认识到 NULL
是一个特殊的宏,从而保留一些类型安全......当警告起作用时。
当然,在 C++11 中,应该使用 nullptr
来代替。在 C++03 中甚至 Stroustrup已经推荐使用 0
而不是宏。
关于c++ - 为什么在 C++ 中使用了 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22932360/