为什么我们使用 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