为什么将未使用的返回值强制转换为 void?

新手上路,请多包涵
int fn();

void whatever()
{
    (void) fn();
}

是否有任何理由将未使用的返回值转换为 void,还是我认为这完全是浪费时间?

原文由 markh44 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 733
2 个回答

大卫的 回答 几乎涵盖了这样做的动机,明确地向其他“开发人员”展示你知道这个函数返回但你明确地忽略它。

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

我认为对于 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.

原文由 Richard Corden 发布,翻译遵循 CC BY-SA 3.0 许可协议

从 C++11 开始,您还可以执行以下操作:

 std::ignore = fn();

这应该在标有 [[nodiscard]] 的函数上达到相同的结果

原文由 Pace 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题