gpt4 book ai didi

c++ - 转换函数是否返回 void "old-style-cast"?

转载 作者:可可西里 更新时间:2023-11-01 16:08:53 32 4
gpt4 key购买 nike

Coverity 提示我们代码库中的各种函数调用没有检查返回值。

Unchecked return value (CHECKED_RETURN)3. check_return: Calling Append without checking return value (as is done elsewhere 73 out of 78 times).

在过去,我们会通过将返回值转换为 void(如讨论的 here )来简单地解决这个问题(在仔细检查返回值确实不重要之后):

(void)Foo.Append(bar);

但是,我们正朝着启用所有警告的方向努力,并且将警告视为错误,所以我有点担心上面的代码会生成一个old-style-cast诊断。如果是这种情况,我将需要将我们的代码修改为相当丑陋的格式:

static_cast<void>( Foo.Append(bar) );

但是,gccclang 似乎都能够毫无怨言地编译此代码(第一种 形式)。所以我想我的问题的最终形式是这样的:就 C 风格的转换而言,转换函数返回到 void 是否被视为规则的异常(exception)?或者我是否需要仔细检查我的代码,看看有问题的行是否实际上没有包含在这些构建中?

最佳答案

没关系。

(void) f(x);

始终等同于 static_cast根据 [expr.static.cast]/6 :

Any expression can be explicitly converted to type cv void, in which case it becomes a discarded-value expression.

将函数的结果转换为 void是使表达式成为 discard-value-expression方法.现在,C++ 方式应该是 static_cast<void>(...)但是(void) ...是成语(而且更短)。

由于后者定义明确并且在代码库中非常常见,gcc1 和 clang2 使其触发 Wold-style-cast .

它定义明确,被主要编译器认可。没关系。


1) g++ documentation --- 3.5 Options Controlling C++ Dialect

-Wold-style-cast (C++ and Objective-C++ only)
Warn if an old-style (C-style) cast to a non-void type is used within a C++ program. The new-style casts (dynamic_cast, static_cast, reinterpret_cast, and const_cast) are less vulnerable to unintended effects and much easier to search for.

2) not documented

关于c++ - 转换函数是否返回 void "old-style-cast"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53485380/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com