首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >std::is_signed<T>与std::numeric_limits<T>::is_signed的差异?

std::is_signed<T>与std::numeric_limits<T>::is_signed的差异?
EN

Stack Overflow用户
提问于 2013-03-09 00:34:14
回答 1查看 879关注 0票数 8

std::is_signed<T>std::numeric_limits<T>::is_signed都应该给出关于T的签名性的答案。

为什么现在有两个符号指标(即自C++11以来)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-09 00:48:01

我要猜测一下,唯一的区别是std::numeric_limits<T>是否专门针对用户定义的类型。当然,这种用户定义的类型可以为is_signed提供自己的价值。但是,在这种类型上请求std::is_signed<T>::value总是会返回false,除非std::is_signed<T>是独立专门化的。

似乎std::is_signed<T>所代表的条件是

代码语言:javascript
运行
复制
is_arithmetic<T>::value && T(-1) < T(0)

Update:始终知识丰富的Hinnant points out,虽然std::numeric_limits<>可以合法地专门化,但除非另有规定,<type_traits>中的任何内容都不允许专门化,而is_signed没有指定为可专门化的。

因此,std::numeric_limits<T>::is_signed可以为用户定义的类型返回true (如果它是专门化的),但是std::is_signed<T>::value总是返回用户定义类型的false

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15305723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档