C++11引入了nullptr
关键字,我没有这个关键字。
我想C中有NULL
宏,我读到了C ++中使用的一些东西here和here,但我仍然不确定什么是正确的方法。在旧的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上,它已被埋没,我找不到它。谢谢!
答案 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
是最好的。