回答
std::is_signed
定义如下(表49 - 类型属性谓词,n3485):
is_arithmetic<T>::value && T(-1) < T(0)
bool
是一个组成型[basic.fundamental]/7,因此算术型[basic.fundamental]/8。
bool(x)
其中x
为int
,采用布尔转换[conv.bool]/1
算术,无作用域枚举,指针,或指向构件类型的prvalue可以被转换成的prvalue键入
bool
。零值,空指针值或空成员指针值被转换为false
;任何其他值转换为true
。 [...]
因此,我们有bool(-1) < bool(0)
评估对true < false
,这是受(见[expr.rel]/2),以通常的算术转换[EXPR]/10 =>整数提升[conv.prom ]/6
bool
类型的prvalue可以转换为int
类型的prvalue,与false
变为零和true
成为一个。
比较然后读取1 < 0
,这是false
。检查保证评估为false
。
在n3797,定影LWG 2197后,检查被定义如下:
如果
is_arithmetic<T>::value
是true
,相同的结果integral_constant<bool, T(-1) < T(0)>::value
;否则,false
哪一个在T == bool
的情况下有相同的结果。
从20.9.4.3,表49:
is_arithmetic ::值& & T(-1)< T(0)
那么转换-1时转换成以布尔?当然,1:
零值,空指针值或空成员指针值是 转换为false;任何其他值都将转换为true。
(4。12)
和dyp正确地将转换添加到int我认为理所当然:-)。 –
- 1. std :: is_signed之间的区别<T>和std :: numeric_limits <T> :: is_signed?
- 2. WebSecurity.ChangePassword返回FALSE值
- 3. Codeigniter表单验证总是返回false
- 4. std :: strftime返回值
- 5. std :: std :: string保证.c_str()返回相同的结果吗?
- 6. asp.net jquery验证返回false
- 7. openid验证返回false
- 8. 这是返回false
- 9. 布尔值总是返回false
- 10. mysqli_query返回false,而不是价值
- 11. 布尔值总是返回false
- 12. std :: cout是否有返回值?
- 13. 数组值comparisong返回false
- 14. jQuery高度()返回false值
- 15. 在Prolog中返回False值?
- 16. Vlookup返回false作为值
- 17. CheckBoxList.Selected不断返回False值
- 18. 为什么std :: is_array为std :: array返回false?
- 19. shared_from_this()返回std :: shared_ptr <const X>,而不是std :: shared_ptr <X>
- 20. boost :: filesystem :: path :: native()返回std :: basic_string <wchar_t>而不是std :: basic_string <char>
- 21. rawQuery返回总是返回false
- 22. ColdFusion如果语句值没有返回true,而是返回false
- 23. (X <8)返回false当x = -3(双)
- 24. value.length <10返回false不工作
- 25. 回报的std ::矢量<std::string>返回垃圾
- 26. 为什么null <>“something”返回false
- 27. PHP邮件()返回false日志是空
- 28. Request.IsAjaxRequest()总是返回false
- 29. VisualStateManager.GoToState总是返回false
- 30. HttpContext.Current.User.IsInRole(roleName)总是返回false
通过那些文档,清楚。寻找标准报价? – Yakk
有趣的问题。 'bool'是一个整数类型,因此是一个算术类型,而'is_signed'是基于检查'is_arithmetic :: value && T(-1)
dyp
@Yakk是的,无论您提供什么样的支持。如果在'std :: is_signed :: value'中没有保证,那么在我的模板中测试'std :: numeric_limits :: is_signed'有什么不利吗? –
loop