std::is_signed<T>和std::numeric_limits<T>::is_signed都应该给出关于T的签名性的答案。
为什么现在有两个的符号指标(即自C++11以来)?
发布于 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>所代表的条件是
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。
https://stackoverflow.com/questions/15305723
复制相似问题