【发布时间】:2016-06-05 20:28:15
【问题描述】:
我正在使用愚蠢的范围保护,它正在工作,但它会生成一个警告说该变量未使用:
warning: unused variable ‘g’ [-Wunused-variable]
代码:
folly::ScopeGuard g = folly::makeGuard([&] {close(sock);});
如何避免这样的警告?
【问题讨论】:
-
我认为你不应该使用
folly::ScopeGuard g = folly::makeGuard([&] {close(sock);});。你应该使用SCOPE_EXIT{close(sock);}。看看这是否会使警告消失。如果没有,可能有一种方法可以在定义中破解使用。 -
什么编译器版本?如果
g的析构函数确实做了一些事情,那么编译器不应该对此发出警告,它可能被认为是一个错误(并且可能已在以后的版本中修复)。 -
应该注意的是,C++17 似乎正在获得一个
[[maybe_unused]]属性,该属性将提供一种标准保证的方式来声明一个变量将不被使用。 -
@M.M:编译器警告此类变量并非不合理,即使它们具有执行某些操作的析构函数。如果你只是声明了一个
std::string并且不小心忘记使用它,编译器仍然应该警告它,因为你几乎肯定是想对它做些什么。 -
@NicolBolas 公平点
标签: c++ c++11 scopeguard folly