使用 static_cast<void>() 的目的是什么?
What is purpose of using static_cast<void>()?
static_cast<void>()
就是写void
的'C++ way'转换
在 en.cppreference.com 网站中提到的 as 丢弃表达式的值。在下面 link 解释 部分
的四点
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 在他的 post 中指出的那样,从 C++17 开始,您可以选择使用 [[maybe_unused]]
属性。
static_cast<void>()
就是写void
的'C++ way'转换
在 en.cppreference.com 网站中提到的 as 丢弃表达式的值。在下面 link 解释 部分
的四点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 在他的 post 中指出的那样,从 C++17 开始,您可以选择使用 [[maybe_unused]]
属性。