在gnu ++ 11标准中,如何在没有警告的情况下编写“嵌套if ... else语句的常量”?

问题描述 投票:4回答:2

当我使用嵌套的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 ++的专家,所以如果问题听起来很业余,请原谅。

c++ if-statement code-analysis static-code-analysis
2个回答
3
投票

对于T的特定实例化,if条件是恒定的。换句话说std::is_same<T, int>::value&c。是常量表达式。

但如果您以完全合法的方式设置代码,那么这可能是必要的。 (如果避免使用静态分析器警告很重要,您可以使用模板特化来重构静态多态技术。)

似乎静态分析仪对我过度热心。


2
投票

编码工具实际上要求您放弃以下良好实践:

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) ...
© www.soinside.com 2019 - 2024. All rights reserved.