これは簡単です。標準C++ライブラリには、numeric_limitsというクラステンプレートがありますので、その静的データメンバis_signedを参照すればよいだけです。numeric_limitsクラステンプレートを使用するには、<limits>をインクルードする必要があります。
0 1 2 |
numeric_limits<type>::is_signed |
使用例:
0 1 2 3 4 5 |
cout << "size_tは符号" << (numeric_limits<size_t>::is_signed ? "付" : "無") << endl; cout << "ptrdiff_tは符号" << (numeric_limits<ptrdiff_t>::is_signed ? "付" : "無") << endl; |
C++11以降であれば、<type_traits>で定義されているis_signedクラステンプレートを使うこともできます。
0 1 2 |
is_signed<type>::value |
また、C++17以降であれば、is_signed_vを使うこともできます。
0 1 2 |
is_signed_v<type> |
使用例:
0 1 2 3 4 5 |
cout << "size_tは符号" << (is_signed<size_t>::value ? "付" : "無") << endl; cout << "ptrdiff_tは符号" << (is_signed_v<ptrdiff_t> ? "付" : "無") << endl; |
※ std::は省略しています。