使用 static_cast() 的目的是什么<void>?
What is purpose of using static_cast<void>()?
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]]
属性。
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 在c++类上调用void函数
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- 在派生函数中指定void*参数
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- C++为什么尽管我调用了void函数,它却不起作用
- 如何从void函数输出字符串
- 我应该使用什么来代替void作为变体中的替代类型之一
- 奇怪的结构&GCC&clang(void*返回类型)
- 呼叫运营商<<临时
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- 为什么这个函数将"const char*"转换为"void* const"而不是"const void*"
- 引用一个已擦除类型(void*)的指针
- 将尾部调用void(i32,..)位转换为llvm::函数以获取FnAttribute
- 库函数需要一个 std::function<void(void)>,如何传入类函数?
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 如何将指针从一个void函数传递到另一个C++
- <<操作员在下面的行中工作
- 为什么我在使用void函数时得到错误代码C2276
- void*到驱动程序中的UnicodeString