C ++ 98正确检查空指针

时间:2017-07-05 13:25:29

标签: c++98 null-pointer

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

我想C中有NULL宏,我读到了C ++中使用的一些东西herehere,但我仍然不确定什么是正确的方法。在旧的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上,它已被埋没,我找不到它。谢谢!

2 个答案:

答案 0 :(得分:1)

我在这里回答我自己的问题感觉不对,因为我绝对没有资格,但是我从詹姆斯·坎泽那里读到了这个答案here(尽管有更新的标准,它仍然标记为C ++):

  

如果你使用g ++,你真的应该使用:meshfunc echo "starting command" echo "!inst_dir!runME.bat -parameter1 !parameter2! !parameter1v! -script pythonscript.py" echo start_time=!time! call "!inst_dir!runME.bat" -parameter1 !parameter2! !parameter1v! -script pythonscript.py > output.txt for /F "delims=" %%i IN (output.txt) DO ( set cmdline=%%i echo currentENDline=!cmdline! ) EXIT /B 0

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

NULL

在这3个中,我在我的问题中提到的最后一个,是从指针到bool( hiss )的隐式转换。使用(p != NULL) //requires #include <stddef.h> (p != 0) (p) !=至少会显式转换为bool,而且,使用==显示您检查空指针的意图。

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

答案 1 :(得分:0)

g ++默认使用C ++ 11已有一段时间了。

因此,您可以使用nullptr并成为&#34;现代&#34;以及类型安全。

如果你必须是预先C ++ 11便携式NULL是最好的。