[这个问题与这个问题相关,但并不相同。]
如果我尝试将某些类型的值用作布尔表达式,我会收到警告。而不是忽略警告,有时我会使用三元运算符(?:
)将其转换为布尔值。使用两个非运算符(!!
)似乎可以做同样的事情。
这是我的意思:
typedef long T; // similar warning with void * or double
T t = 0;
bool b = t; // performance warning: forcing 'long' value to 'bool'
b = t ? true : false; // ok
b = !!t; // any different?
那么,“双非”技术真的能做同样的事情吗?它比三元表达式技术更安全还是不安全?对于非整型类型(例如,对于void *
或double
的T
),这种技术是否同样安全?
我并不是在问!!t
是否好看。我在问它是否和t ? true : false
语义上有所不同。
!!
。在 JavaScript 中,双重否定是将变量转换为布尔值的惯用方式,如果 JavaScript 开发者能够理解它,我也期望 C++ 用户能够理解。 - just somebodyb = t ? true : false;
具有将t
显式转换为bool的显式强制类型转换。b = t;
具有隐式类型转换。尽管在必须明确时我更喜欢使用b = static_cast<bool>(t);
- Caleth