static_cast<void>()
是编写void
转化
在en.cppreference.com网站上提到丢弃表达式的值。在说明部分
下面的四个点上http://en.cppreference.com/w/cpp/language/static_cast
我们应该使用static_cast<void>()
的位置和原因?举个例子..
答案 0 :(得分:5)
这是一种告诉可以使用变量来解除相应编译器警告的方法。在C ++ 17中引入[[maybe_unused]]
属性已弃用此方法。
答案 1 :(得分:1)
转换为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]]
属性。