为了账号安全,请及时绑定邮箱和手机立即绑定

为什么将未使用的返回值转换为无效?

为什么将未使用的返回值转换为无效?

C++ C
富国沪深 2019-07-09 12:37:53
为什么将未使用的返回值转换为无效?int fn();void whatever(){     (void) fn();}是否有任何理由将一个未使用的回报价值变为无效,还是我认为这完全是浪费时间的想法是正确的?后续行动:看来很全面。我认为它比注释一个未使用的返回值更好,因为自记录代码比注释更好。就我个人而言,我会关掉这些警告,因为这是不必要的噪音。如果一只虫子因为它逃跑了我会吃了我的话.。
查看完整描述

3 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

很大程度上涵盖了这样做的动机,即显式地向其他“开发人员”表明您知道此函数返回,但您显式地忽略了它。

这是一种确保在必要时始终处理错误代码的方法。

我认为对于C+来说,这可能是我唯一喜欢使用C风格的转换的地方,因为使用完整的静态转换表示法在这里感觉有点过火了。最后,如果您正在审查或编写编码标准,那么明确声明对重载运算符的调用(不使用函数调用符号)也是一个好主意:

class A {};A operator+(A const &, A const &);int main () {
  A a;
  a + a;                 // Not a problem
  (void)operator+(a,a);  // Using function call notation - so add the cast.


查看完整回答
反对 回复 2019-07-09
?
慕仙森

TA贡献1827条经验 获得超7个赞

在工作中,我们使用它来确认函数有一个返回值,但是开发人员断言忽略它是安全的。因为您将这个问题标记为C+,所以您应该使用静态铸造:

static_cast<void>(fn());

就编译器而言,将返回值转换为空没有什么意义。


查看完整回答
反对 回复 2019-07-09
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

铸造到void用于抑制未使用变量和未保存的返回值或表达式的编译器警告。


“标准”(2003)在第5.2.9/4节中说,


任何表达式都可以显式转换为“cvvoid”类型。表达式值是弃置.


所以你可以写:


//suppressing unused variable warnings

static_cast<void>(unusedVar);

static_cast<const void>(unusedVar);

static_cast<volatile void>(unusedVar);


//suppressing return value warnings

static_cast<void>(fn());

static_cast<const void>(fn());

static_cast<volatile void>(fn());


//suppressing unsaved expressions

static_cast<void>(a + b * 10);

static_cast<const void>( x &&y || z);

static_cast<volatile void>( m | n + fn());

所有表格均有效。我通常把它缩短为:


//suppressing  expressions

(void)(unusedVar);

(void)(fn());

(void)(x &&y || z);

也没问题。


查看完整回答
反对 回复 2019-07-09
  • 3 回答
  • 0 关注
  • 450 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信