使用模板函数定义类型安全0

时间:2018-11-03 09:07:28

标签: c++ templates syntax null c++98

我正在使用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”也有疑虑。我想我有点偏执:-)

0 个答案:

没有答案