Coverity提示我们的代码库中的各种函数调用都没有检查返回值。
过去,通过将返回值转换为void
(如here所述),我们可以简单地解决此问题(在仔细检查返回值确实不重要之后):
(void)Foo.Append(bar);
但是,我们正在努力启用所有警告,并将警告视为错误,因此我有点担心上面的代码将生成
old-style-cast
诊断。如果是这种情况,我将需要将我们的代码修改为难看的格式:static_cast<void>( Foo.Append(bar) );
但是, gcc 和 clang 似乎都可以编译此代码(第一种形式)而无需提示。因此,我想我的问题的最终形式是:就C样式转换而言,将函数转换为
void
视为该规则的异常(exception)吗?还是我需要仔细检查我的代码,看看所涉及的行是否实际上未包含在这些版本中? 最佳答案
没关系。
(void) f(x);
根据
static_cast
始终等于[expr.static.cast]/6
:将函数的结果转换为
void
是使表达式成为discard-value-expression的方法。现在,C++方式应该是static_cast<void>(...)
,但是(void) ...
是一个习惯用法(并且更短)。由于后者定义明确,并且在代码库中确实很常见,因此gcc1和clang2使其不会触发
Wold-style-cast
。它定义明确,已被主要编译器认可。没关系。
1)g++ documentation --- 3.5 Options Controlling C++ Dialect
2)not documented