【问题标题】:What is purpose of using static_cast<void>()? [duplicate]使用 static_cast<void>() 的目的是什么? [复制]
【发布时间】:2018-03-14 08:59:57
【问题描述】:

static_cast&lt;void&gt;() 是编写void 转换的“C++ 方式”

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

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

我们应该在哪里以及为什么要使用static_cast&lt;void&gt;()?举个例子吧。。

【问题讨论】:

    标签: c++ casting void static-cast


    【解决方案1】:

    这是一种方式来告诉你可以使用一个变量来抑制相应的编译器警告。随着在 C++17 中引入 [[maybe_unused]] 属性,这种方法已被弃用。

    【讨论】:

    • @TheVee 不,可以使用变量:来自 [dcl.attr.unused] 3 [注意:对于标记为 may_unused 的实体,实现不应发出实体未使用的警告,或者尽管存在属性但仍使用实体的警告。 ——尾注]
    【解决方案2】:

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

    一个例子:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-04
      • 2011-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-08
      相关资源
      最近更新 更多