两者std::is_signed<T>
和std::numeric_limits<T>::is_signed
都应该给出关于 的签名的答案T
。
为什么现在有两个符号指示符(即从 C++11 开始)?
问问题
840 次
1 回答
10
我将冒险猜测唯一的区别是是否std::numeric_limits<T>
专门用于用户定义的类型。这样一个用户定义的类型当然可以为is_signed
. 但是除非已经独立专门化,否则对这种类型的请求std::is_signed<T>::value
将始终返回。false
std::is_signed<T>
似乎std::is_signed<T>
代表的条件是
is_arithmetic<T>::value && T(-1) < T(0)
更新:知识渊博的 Howard Hinnant指出,虽然std::numeric_limits<>
可以在法律上进行专门化,但<type_traits>
除非另有说明,否则不允许专门化任何内容,并且is_signed
未指定为可专门化。
因此,std::numeric_limits<T>::is_signed
可能会返回true
用户定义的类型(如果它已被专门化),但std::is_signed<T>::value
始终会返回false
用户定义的类型。
于 2013-03-09T00:48:01.847 回答