为什么我们使用 static_cast 为 NULL
Why we are using static_cast to NULL
当我尝试研究 QP/CPP 代码时,我遇到了以下行。
QTimeEvt *t;
// ...
if (t == static_cast<QTimeEvt *>(0)) {
为什么他们做 static_cast of 0?
如果他们想检查 NULL,我们可以直接这样做吗?
您可以在
中找到此源代码
http://www.state-machine.com/qpcpp/qf__time_8cpp_source.html
是的,这是不必要的,尽管 "clarity" 的一些风格指南可能强制要求这样做,或者它可能是为了让过度热心的静态分析工具沉默。
当然,现在我们只写 nullptr
就这样了。
惯用的写法
QTimeEvt *t;
// ...
if (t == static_cast<QTimeEvt *>(0)) {
…是
QTimeEvt* t;
// ...
if( !t ) {
或者你可以写成
if( not t ) {
…虽然你也可以写
if( t == nullptr ) {
... 或者,¹C++03 风格,
if( t == 0 ) {
不需要强制转换。
这只是消耗 reader 时间的废话。
备注:
¹ 如果包含 <stddefs.h>
header,则可以在需要空指针的地方编写 NULL
而不是 0
。使用现代实现 NULL
甚至可以定义为 nullptr
。
当我尝试研究 QP/CPP 代码时,我遇到了以下行。
QTimeEvt *t;
// ...
if (t == static_cast<QTimeEvt *>(0)) {
为什么他们做 static_cast of 0? 如果他们想检查 NULL,我们可以直接这样做吗?
您可以在
中找到此源代码http://www.state-machine.com/qpcpp/qf__time_8cpp_source.html
是的,这是不必要的,尽管 "clarity" 的一些风格指南可能强制要求这样做,或者它可能是为了让过度热心的静态分析工具沉默。
当然,现在我们只写 nullptr
就这样了。
惯用的写法
QTimeEvt *t;
// ...
if (t == static_cast<QTimeEvt *>(0)) {
…是
QTimeEvt* t;
// ...
if( !t ) {
或者你可以写成
if( not t ) {
…虽然你也可以写
if( t == nullptr ) {
... 或者,¹C++03 风格,
if( t == 0 ) {
不需要强制转换。
这只是消耗 reader 时间的废话。
备注:
¹ 如果包含 <stddefs.h>
header,则可以在需要空指针的地方编写 NULL
而不是 0
。使用现代实现 NULL
甚至可以定义为 nullptr
。