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++ 标准的方式。(但是,我仍然会屈服于别人的专业知识并标记他们的答案;我只是一名本科生。)