C++98 正确检查空指针

Jos*_*ler 5 null-pointer c++98

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

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

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

aWrapperDataStructure x;
BOOST_CHECK_NE(x.get_ptr(), static_cast<decltype(x.get_ptr())>(nullptr));
Run Code Online (Sandbox Code Playgroud)

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

BOOST_CHECK(x.get_ptr()); //true when not NULL
Run Code Online (Sandbox Code Playgroud)

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

小智 2

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

如果你使用 g++,你真的应该使用NULL.

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

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

(p != 0)

(p)
Run Code Online (Sandbox Code Playgroud)

在这 3 个中,我在问题中提到的最后一个,执行从指针到 bool 的隐式转换(hiss)。使用!=and==至少会显式转换为 bool,此外,使用NULL显示了检查空指针的意图。

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

  • 这相当于微优化问题的风格。如何测试 null 不太可能对代码的可读性产生任何影响,并且您会在生产 C++ 中看到所有方法。 (2认同)