Tim*_*all 10 c++ casting suppress-warnings
Coverity抱怨我们的代码库中的各种函数调用都没有检查返回值.
未选中的返回值(CHECKED_RETURN)3.check_return:在不检查返回值的情况下调用Append(78次中的其他73次).
在过去,我们会简单地通过铸造回归解决了这个问题(后双重检查返回值真的不是很重要)void(如讨论这里):
(void)Foo.Append(bar);
Run Code Online (Sandbox Code Playgroud)
但是,我们正在开始启用所有警告,并将警告视为错误,因此我有点担心上面的代码会生成old-style-cast诊断.如果是这种情况,我需要将我们的代码修改为相当丑陋的格式:
static_cast<void>( Foo.Append(bar) );
Run Code Online (Sandbox Code Playgroud)
但是,gcc和clang似乎都可以编译这段代码(第一种形式)而不会抱怨.所以我想我的问题的最终形式是这样的:void就C风格的演员而言,是否将一个函数返回到被认为是规则的例外?或者我是否需要仔细检查我的代码并查看相关的行是否实际上没有包含在这些构建中?
没关系.
(void) f(x);
Run Code Online (Sandbox Code Playgroud)
总是等同于static_cast按[expr.static.cast]/6:
任何表达式都可以显式转换为cv void类型,在这种情况下,它将成为废弃值表达式.
转换函数的结果来void为所述使一种表达的方式丢弃值表达.现在,C++方法应该是static_cast<void>(...)但(void) ...是习语(和较短).
由于后者定义明确且在代码库中非常常见,因此gcc 1和clang 2使其不会触发Wold-style-cast.
它是明确定义的,由主要编译器认可.没关系.
-Wold-style-cast(仅限C++和Objective-C++)
如果在C++程序中使用旧式(C样式)转换为非void类型,则发出警告.全新风格的类型转换(dynamic_cast,static_cast,reinterpret_cast和const_cast)是意想不到的效果不那么脆弱,更容易寻找.
2) 没有记录
| 归档时间: |
|
| 查看次数: |
504 次 |
| 最近记录: |