这是一个好的使用方法吗std::ignore
忽略未使用的变量?
假设我有一个这样的函数:
void func(int i)
{
//for some reason, I don't need i anymore but I cannot change signature of function
std::ignore = i;
}
附加信息
这是一个例子,一些答案建议使用匿名的变量。但对于其他情况我该怎么做,例如:
int Thread_UnSafe_func_returnSomething():
void func()
{
// To make it thread safe
// Also it is required to call only once
static int i = Thread_UnSafe_func_returnSomething();
std::ignore = i;
}
std::ignore
可能有效,但它旨在用于元组。因此,您需要包含元组标头以及谁知道为分配执行了哪些操作。这也可能会在另一个 C++ 版本中中断,因为从未记录过以这种方式使用。
更好的方法是 C++17 属性[[maybe_unused]]
void func([[maybe_unused]] int i)
{
}
它将声明放在变量声明的右侧,因此您不必在额外的行/语句中声明它。
同样可以用于局部(和局部静态)变量
...
[[maybe_unused]] static int a = something();
...
还有更多:
出现在类、typedef、变量、a 的声明中
非静态数据成员、函数、枚举或枚举器。
如果编译器对未使用的实体发出警告,则该警告是
对任何声明为 Maybe_unused 的实体进行抑制。
See http://en.cppreference.com/w/cpp/language/attributes http://en.cppreference.com/w/cpp/language/attributes
至于那些担心在声明变量未使用后仍然可以使用的人:
是的,这是可能的,但是(至少使用 clang ),如果您使用,您会收到警告maybe_unused
声明的变量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)