C++98 正确检查空指针

C++98 proper check for a null pointer

C++11 引入了 nullptr 关键字,我没有。

我想有来自 C 的 NULL 宏,我从一些东西 here and here 中读到关于在 C++ 中使用它,但我仍然不确定检查 null 的正确方法是什么这个旧标准 C++ 中的指针。

我基本上希望能够使用 Boost Test 为我的测试用例编写此代码:

aWrapperDataStructure x;
BOOST_CHECK_NE(x.get_ptr(), static_cast<decltype(x.get_ptr())>(nullptr));

但也许,正如 Tutorials Point 所建议的那样,考虑到限制条件,这样的事情更合适:

BOOST_CHECK(x.get_ptr()); //true when not NULL

不过,这让我有些反感,所以我想知道这里的最佳做法是什么。如果它在网上的某个地方,或者在 SO 上,它已经被埋了很久,我找不到了。谢谢!

我觉得在这里回答我自己的问题是不对的,因为我绝对没有资格,但我读了 James Kanze 的这个答案 here(尽管有更新的标准,它仍然被标记为 C++):

If you use g++, you really should use NULL.

这对我来说绝对够用了。不过,我发现这些 表达式 用于检查空指针:

(p != NULL) //requires #include <stddef.h>

(p != 0)

(p)

在这 3 个中,我在问题中提到的最后一个,进行了从指针到布尔值的隐式转换 (hiss)。使用 !=== 至少会显式转换为 bool,此外,使用 NULL 表明您打算检查空指针。

因此,我认为即使不使用 g++,表达式 (p != NULL) 也是较旧的 C++ 标准最合适的方式。 (但是,我还是会把别人的专业知识让给别人,并标记他们的答案;我只是一名本科生。)

g++ 现在默认使用 C++11 一段时间了。

因此您可以使用 nullptr 和 "modern" 以及类型安全。

如果你必须是 C++11 之前的可移植 NULL 是最好的。