7

std::is_signed<T>との両方std::numeric_limits<T>::is_signedが の符号性に関する答えを与えることになっていますT。署名の指標が2 つ
になったのはなぜですか(つまり、C++11 以降)?

4

1 に答える 1

10

std::numeric_limits<T>唯一の違いは、がユーザー定義型に特化されているかどうかだけだという推測を危険にさらすつもりです。もちろん、このようなユーザー定義型は、 に独自の値を提供できますis_signed。しかし、このタイプを求めると、独自に専門化されていない限りstd::is_signed<T>::value、常に返されます。falsestd::is_signed<T>

std::is_signed<T>を表す条件は

is_arithmetic<T>::value && T(-1) < T(0)

更新: 常に知識豊富なハワード ヒナントは、法律上は専門化できるが、特に指定がない限り、専門化することは許可されておらず、専門化可能であるとは指定されていないことを指摘しています。std::numeric_limits<><type_traits>is_signed

したがって、ユーザー定義型 (特殊化されている場合)std::numeric_limits<T>::is_signed 返すことがありますが、常にユーザー定義型を返します。truestd::is_signed<T>::valuefalse

于 2013-03-09T00:48:01.847 に答える