使用 static_cast() 的目的是什么<void>?

What is purpose of using static_cast<void>()?

本文关键字:lt void gt 是什么 static cast 使用      更新时间:2023-10-16

static_cast<void>()是编写void转换的"C++方式">

在 en.cppreference.com 网站中提到的丢弃表达式的值。在下面的链接中,解释部分的四点

http://en.cppreference.com/w/cpp/language/static_cast

我们应该在哪里以及为什么使用static_cast<void>()?举个例子。

这是一种告诉变量可以未使用并抑制相应编译器警告的方法。此方法已在 C++17 中引入 [[maybe_unused]] 属性后弃用。

强制转换为void的通常目的是"使用"计算结果。 在相对严格的构建环境中,当声明变量时,通常会输出警告甚至错误,甚至可能写入变量,但结果从未使用过。 如果在代码中,您知道在某处不需要结果,则可以使用 static_cast<void> 方法将结果标记为丢弃 - 但编译器将考虑当时使用的变量,不再创建警告或错误。

举个例子:

#include <iostream>
int myFunction() __attribute__ ((warn_unused_result));
int myFunction()
{
  return 42;
}
int main()
{
  // warning: ignoring return value of 'int myFunction()',
  // declared with attribute warn_unused_result [-Wunused-result]
  myFunction();
  // warning: unused variable 'result' [-Wunused-variable]
  auto result = myFunction();
  // no warning
  auto result2 = myFunction();
  static_cast<void>(result2);
}

当用g++ -std=c++14 -Wall example.cpp编译时,前两个函数调用将创建警告。

正如 VTT 在他的帖子中指出的那样,从 C++17 开始,您可以选择使用 [[maybe_unused]] 属性。