当我使用嵌套的if .... else语句时
if (std::is_same<T, T1>::value)
{
// do something
}
else if (std::is_same<T, T2>::value)
{
// do something else
}
.
.
.
else
{
// print error
}
我得到一个QACPP静态代码分析器的编译器警告qacpp-4.2.1-4090,并带有消息“此条件'if'语句是常量。”如何在gnu ++ 11标准中修复此编译器警告?
注意:我不是C ++的专家,所以如果问题听起来很业余,请原谅。
对于T
的特定实例化,if
条件是恒定的。换句话说std::is_same<T, int>::value
&c。是常量表达式。
但如果您以完全合法的方式设置代码,那么这可能是必要的。 (如果避免使用静态分析器警告很重要,您可以使用模板特化来重构静态多态技术。)
似乎静态分析仪对我过度热心。
编码工具实际上要求您放弃以下良好实践:
if (static_condition) {
// code that is effectively compiled out when static_condition is false
}
而是使用类似的东西:
#if static_condition
// code that is compiled out when static_condition is false
#endif
这在你所拥有的确切情况下甚至无法完成,而且是一种劣等的做法。
这不是一个好的,有效的诊断,除非static_condition
显然是无条件的,例如if (false) ...
。
如果诊断工具具有其他价值,请了解如何在特定文件或代码行中禁止该诊断。也许它支持一些可以用于评论的指令来压制一些诊断。
// @foo-bar tool: disable-warning(13125)
if (static_condition) ...