gpt4 book ai didi

c++ - std::is_signed 和 std::numeric_limits::is_signed 之间的区别?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:19:18 25 4
gpt4 key购买 nike

两者都是 std::is_signed<T>std::numeric_limits<T>::is_signed应该给出关于 T 的签名的答案.
为什么现在有两个符号指示符(即自 C++11 起)?

最佳答案

我敢猜测唯一的区别是如果 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 points out那同时std::numeric_limits<>可以是法律特化的,<type_traits> 中没有任何内容除非另有说明,否则允许专门化,并且 is_signed未指定为可专门化。

因此,std::numeric_limits<T>::is_signed 可能返回true对于用户定义的类型(如果它是专门的)但是 std::is_signed<T>::value将始终返回 false对于用户定义的类型。

关于c++ - std::is_signed<T> 和 std::numeric_limits<T>::is_signed 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15305723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com