[此问题与this one 相关但不相同。 .]
如果我尝试使用某些类型的值作为 boolean 表达式,我会收到警告。有时我不会抑制警告,而是使用三元运算符 (?:
) 将其转换为 boolean 值。使用两个非运算符(!!
)似乎做同样的事情。
这就是我的意思:
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
for T
)?
我不是在问 !!t
是否是好风格。我在问它在语义上是否与 t 不同?真:假
。
最佳答案
的论点!运算符和三元运算符的第一个参数都隐式转换为 boolean 值,所以 !!和?:是 IMO 愚蠢的 Actor 阵容多余的装饰。我投票给
b = (t != 0);
没有隐式转换。
关于c++ - 是 !!在 C++ 中转换为 bool 的安全方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/206106/