std :: is_signed <bool> :: value保证返回false吗?</bool>

时间:2014-03-24 21:01:51

标签: c++ boolean signed

我知道std::numeric_limits<bool>::is_signed总是假的,但std::is_signed<bool>::value也是如此吗?感谢

2 个答案:

答案 0 :(得分:4)

std::is_signed定义如下(表49 - 类型属性谓词,n3485):

is_arithmetic<T>::value && T(-1) < T(0)

bool是一个整数类型[basic.fundamental] / 7,因此算术类型[basic.fundamental] / 8。

bool(x)其中xint,使用布尔转换[conv.bool] / 1

  

算术,无范围枚举,指针或指向成员类型的指针的prvalue可以转换为bool类型的prvalue。零值,空指针值或空成员指针值将转换为false;任何其他值都将转换为true。 [...]

所以我们bool(-1) < bool(0)评估true < false,这是主题(参见[expr.rel] / 2)到通常的算术转换[expr] / 10 =&gt;积分促销[conv.prom] / 6

  

bool类型的prvalue可以转换为int类型的prvalue,其中false变为零true   成为一个。

比较然后读取1 < 0,即false。该支票保证评估为false


在n3797中,在修复LWG 2197之后,检查定义如下:

  

如果is_arithmetic<T>::valuetrue,则结果与integral_constant<bool, T(-1) < T(0)>::value相同;否则,false

T == bool

的结果相同

答案 1 :(得分:1)

从20.9.4.3,表49:

  

is_arithmetic :: value&amp;&amp; T(-1)&lt; T(0)

那么在转换为bool时会将-1转换为什么?当然,1:

  

零值,空指针值或空成员指针值   转换为假;任何其他值都转换为true。

(4.12)