首页 > 解决方案 > 使用“!!”的目的是什么 在 if 语句中

问题描述

我最近看到了下面的代码:

std::error_code ec;

// --- some code

if (!!ec)
{
//error reaction
}

用于什么目的!!?唯一的想法是强制 bool 运算符,但是为了什么?对于 boost 错误类型的某些实现是否有意义?

标签: c++

解决方案


使用!!insideif语句是多余的,因为即使强制转换标记为, ifa 值内部也可能会根据上下文转换为 boolexplicit

但是,在赋值中,这个技巧可以替代显式强制转换:

std::error_code ec;

// some code

// bool is_error = ec;   // compilation error, operator bool is explicit
bool is_error1 = !!ec;   // ok
bool is_error2 = (bool)ec; // better, one may argue
bool is_error3 = static_cast<bool>(ec); // to avoid C-style cast
bool is_error4 = ec.value() != 0; // most verbose, also possible

可能是if(!!ec)赋值表达式的复制粘贴。

另请参阅:何时可以使用显式运算符 bool 而不进行强制转换?


附注:当然可能存在这种技巧在内部相关if的情况 - 以防类型实现operator!和缺少operator bool- 但情况并非如此std::error_code


推荐阅读