当我将嵌套的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,并显示消息"The condition in this 'if‘statement is constant“。如何在gnu++11标准中修复此编译器警告?
注意:我不是C++的专家,所以如果这个问题听起来很业余,请原谅。
发布于 2019-04-03 04:36:16
对于T的特定实例化,if条件是常量。换句话说,std::is_same<T, int>::value &c是常量表达式。
但是,如果您以这种完全合法的方式设置代码,那么这很可能是必要的。(如果消除静态分析器警告很重要,则可以使用模板专门化将其重构为静态多态性技术。)
似乎静态分析器对我来说过于热心了。
发布于 2019-04-03 05:22:27
编码工具从字面上要求您放弃良好的实践,例如:
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这在你所处的环境中甚至是不可能做到的,而且是一种低级的实践。
这不是一个好的、高效的诊断方法,除非在像if (false) ...这样的static_condition明显是无条件的情况下。
如果诊断工具在其他方面很有价值,请了解如何在特定的文件或代码行中抑制该诊断。也许它支持一些指令,这些指令可以放入注释中,以抑制一些诊断。
// @foo-bar tool: disable-warning(13125)
if (static_condition) ...https://stackoverflow.com/questions/55483131
复制相似问题