我正在使用C ++ 98开发一个项目。所以我没有“ nullptr”。当然,我会对项目中的源代码进行静态代码分析。从中我得到很多关于赋值和比较中使用0的信息。所有消息都与“不同类型”有关。我开始将后缀添加到0,以定义一些正确的类型。但这并非对所有内置数据类型都可行。尤其是不适用于指针(是的,原始指针)。
然后我想出了以下模板:
template <typename T>
const T null(void)
{
return static_cast<T>(0);
}
因此,我不再收到有关混合类型的警告。我可以写例如:
typedef unsigned char uchar;
. . .
uchar someVariable = null<uchar>();
SomeComplexClass *someComplexClass = null<SomeComplexClass *>();
. . .
if (null<SomeComplexClass *>() == someComplexClass)
{
. . .
}
您可能会问,这是什么废话。但是作为功能安全专家并在汽车行业工作,即使在像上面这样的小型业余家庭项目中,我也越来越谨慎。
在阅读了Scott Meyers的《有效 “现代C ++”,尤其是“第1项:了解模板类型推导。”,我不再确定该模板在任何情况下是否都可以工作。编译器(gcc,raspbian)当然总是删除此内容并将其替换为目标代码中的纯0。但是
我什至对“ nullptr”也有疑虑。我想我有点偏执:-)