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
是最好的。
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
是最好的。