当一个指针是 NULL,另一个指针是 nullptr 时,进行比较是否安全?这种比较会始终返回 true 吗?
是的。
NULL
和nullptr
都是"空指针常量",
空指针常量可以转换为指针类型;结果是该类型的空指针值,并且与任何对象指针或函数指针类型的其他值都不同。
最后,
相同类型的两个空指针值应相等。
(引用N4140中4.10/1的两篇引用)
NULL
始终为某种整数类型的0
。 - Cheers and hth. - Alfstd::nullptr_t
的prvalue。 - Baum mit Augen在此国际标准中,宏NULL是实现定义的C++空指针常量
。考虑一下,这意味着必须像你所说的那样。 - Paul Evansstd :: nullptr_t
的prvalue。”另请参见N4140中的4.10 / 1。 - Baum mit Augen
(nullptr == NULL)
,我会在clang中得到错误:error: comparison between NULL and non-pointer ('std::nullptr_t' and NULL) [-Werror,-Wnull-arithmetic]
☹ - undefinedNULL
字面值与nullptr
进行比较,与此处讨论的情况不同:比较两个指针,其中一个被赋值为NULL
,另一个为nullptr
。重要的区别是,在C++中,NULL
通常不是一个指针。 - undefinedNULL
不是指针,而是nullptr
不是一个指针。(但是Fedi上的某人帮助我,将其中一个转换为void *
可以解决这个问题。) - undefined