是! 一个安全的方式来转换为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

    上一篇: Is !! a safe way to convert to bool in C++?

    下一篇: Speech recognition in Windows Phone 8