是! 一个安全的方式来转换为C ++布尔?
[这个问题和这个问题有关,但不一样。]
如果我尝试使用某些类型的值作为布尔表达式,我会收到警告。 我有时使用三元运算符( ?:
:)转换为布尔值,而不是压制警告。 使用两个非运算符( !!
)似乎也是这样做的。
这就是我的意思:
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 *
或T
double
)?
我不问!!t
的好作风。 我在问,它是否在语义上与t ? true : false
不同t ? true : false
t ? true : false
。
!的论点! 运算符和三元运算符的第一个参数都隐式转换为bool,所以!! 和?:是国际海事组织愚蠢的多余的演员装饰。 我投票赞成
b = (t != 0);
没有隐式转换。
或者,你可以这样做: bool b = (t != 0)
小心!
这些是非常独特的概念:
在弥合这些概念时,应该明确地完成。 我最喜欢迪玛的版本:
b = (t != 0);
该代码清楚地表明:比较两个数字并将真值存储在布尔值中。
链接地址: http://www.djcxy.com/p/73541.html