使用static_cast的目的是什么 ()? [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用static_cast的目的是什么 ()? [重复]相关的知识,希望对你有一定的参考价值。

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]]属性。

以上是关于使用static_cast的目的是什么 ()? [重复]的主要内容,如果未能解决你的问题,请参考以下文章

什么时候应该使用 static_cast、dynamic_cast、const_cast 和 reinterpret_cast?

为啥 static_cast 需要指针或引用?

为啥使用 static_cast<int>(x) 而不是 (int)x?

带有多个参数的 static_cast 是怎么回事?

为啥减法与static_cast溢出?

为什么在gcc的is_nothrow_constructible实现中需要static_cast?