smi*_*hax 6 c++ std numeric-limits c++11
双方std::is_signed<T>并std::numeric_limits<T>::is_signed应该提供有关的符号性的答案T.
为什么现在有两个签名指标(即自C++ 11以来)?
Lil*_*ard 10
我将冒险猜测唯一的区别是if 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)
Run Code Online (Sandbox Code Playgroud)
更新:总是知识渊博的Howard Hinnant 指出,虽然std::numeric_limits<>可以合法专业,但<type_traits>除非另有说明,否则不允许任何其他内容,并且is_signed未指定为可专门化.
因此,std::numeric_limits<T>::is_signed 可以返回true用户定义的类型(如果它已被专门化),但std::is_signed<T>::value将始终返回false用户定义的类型.
| 归档时间: |
|
| 查看次数: |
742 次 |
| 最近记录: |