方法一:使用#pragma warning
指令。
#pragma warning
允许选择性地修改编译器警告消息的行为。
#pragma warning( push )
#pragma warning( disable : 4705 ) // replace 4705 with warning number
ScopeGuard close_guard = MakeGuard( &close_file, file );
#pragma warning( pop )
此代码保存当前警告状态,然后禁用特定警告代码的警告,然后恢复上次保存的警告状态。
方法 2:使用类似以下的解决方法。Visual Studio 会很高兴,你也会。此解决方法用于许多 Microsoft 示例以及其他项目中。
ScopeGuard close_guard = MakeGuard( &close_file, file );
close_guard;
或者您可以创建一个#define
解决警告的方法。
#define UNUSED_VAR(VAR) VAR
...
ScopeGuard close_guard = MakeGuard( &close_file, file );
UNUSED_VAR(close_guard);
一些用户表示,由于 ScopeGuard 是 typedef,因此提供的代码将不起作用。这个假设是错误的。
http://www.ddj.com/cpp/184403758
根据 C++ 标准,使用临时值初始化的引用使该临时值在引用本身的生命周期内有效。