首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在gnu++11标准中编写“常量的嵌套if...else语句”而不发出警告?

如何在gnu++11标准中编写“常量的嵌套if...else语句”而不发出警告?
EN

Stack Overflow用户
提问于 2019-04-03 04:32:34
回答 2查看 145关注 0票数 4

当我将嵌套的if....else语句与

代码语言:javascript
复制
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++的专家,所以如果这个问题听起来很业余,请原谅。

EN

回答 2

Stack Overflow用户

发布于 2019-04-03 04:36:16

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

但是,如果您以这种完全合法的方式设置代码,那么这很可能是必要的。(如果消除静态分析器警告很重要,则可以使用模板专门化将其重构为静态多态性技术。)

似乎静态分析器对我来说过于热心了。

票数 3
EN

Stack Overflow用户

发布于 2019-04-03 05:22:27

编码工具从字面上要求您放弃良好的实践,例如:

代码语言:javascript
复制
if (static_condition) {
   // code that is effectively compiled out when static_condition is false
}

而不是使用下面的内容:

代码语言:javascript
复制
#if static_condition
   // code that is compiled out when static_condition is false
#endif

这在你所处的环境中甚至是不可能做到的,而且是一种低级的实践。

这不是一个好的、高效的诊断方法,除非在像if (false) ...这样的static_condition明显是无条件的情况下。

如果诊断工具在其他方面很有价值,请了解如何在特定的文件或代码行中抑制该诊断。也许它支持一些指令,这些指令可以放入注释中,以抑制一些诊断。

代码语言:javascript
复制
// @foo-bar tool: disable-warning(13125)
if (static_condition) ...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55483131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档