std::is_signed<T>
とstd::numeric_limits<T>::is_signed
の両方は、T
の署名度についての回答を返すと想定されています。
なぜ今あるのですか2つの(つまりC++ 11以降)の標識がありますか?std :: is_signedの相違点<T>とstd :: numeric_limits <T> :: is_signed?
答えて
std::numeric_limits<T>
がユーザー定義型に特化している場合にのみ唯一の違いがあると思われます。そのようなユーザー定義の型はもちろん、is_signed
の独自の値を提供できます。しかし、このタイプのstd::is_signed<T>::value
を求めるのは、std::is_signed<T>
が独立して専門化されていない限り、常にfalse
を返します。
std::is_signed<T>
が表すという条件が
is_arithmetic<T>::value && T(-1) < T(0)
更新であるかのように思え:常に-知力ハワードヒナントpoints outstd::numeric_limits<>
が合法的に、専門的なことができますが、<type_traits>
で何もに許可されていないこと特に明記しない限り特殊化し、is_signed
は特化可能であると指定されていません。
(それが特化されていた場合)そのため、std::numeric_limits<T>::is_signed
はユーザー定義型のためtrue
を返すことがありますがstd::is_signed<T>::value
は常にユーザー定義型のためfalse
を返します。
' std :: numeric_limits
@DavidHammen:いいえ、制限はありますが、専門分野には適用されません。 'std'で既存のテンプレートを特殊化することは許されています。自分のものを追加することはできません。 –
@DavidHammen:クラステンプレートやオーバーロード関数/関数テンプレートを部分的に特殊化しないために、名前空間 'std'のテンプレートを完全に特殊化することは常に正当です。 – ildjarn
- 1. 標準<memory>ファイルのboost :: shared_ptrとstd :: shared_ptrの相違点
- 2. double.Epsilon vs std :: numeric_limits <double> :: min()
- 3. Kerberos TGTの動作
- 4. std :: cout << xの間のdiffrenceは何ですか;とstd :: cout << x << std :: endl ;?
- 5. std :: numeric_limits <int> :: has_infinity +条件付き3項演算子
- 6. クラン、STD ::のshared_ptrとstd ::未満/オペレータ<
- 7. std :: vector <std::string>クラッシュ
- 8. std :: std :: stringとstd :: vectorの間の移動<unsigned char>
- 9. のstd ::設定<myType>セグメンテーション違反
- 10. VS2010のstd :: shared_ptrとboost :: shared_ptrの相違点
- 11. <s:property ..>と$ {param}の相違点
- 12. std :: numeric_limitsとは何ですか?<T> :: digitが表すはずですか?
- 13. `std :: vector <std :: uint8_t>の高速コピー
- 14. 「マージ(のstd ::ベクトル<int>&、のstd ::ベクトル<int>&)
- 15. '演算子<<' のstdで::演算子<< [_Traits =のstdと:: char_traits <char>]
- 16. のstd ::機能とstd :: <code>std::packaged_task</code>が<code>void operator()(ArgTypes... args)</code>をオーバーロードしていますので、私は、<code>std::function<void()></code>の<code>std::vector</code>に<code>std::packaged_task</code>を移動しようとしていますpackaged_task変換
- 17. エラー2664 - std :: vector <...>をstd :: tr1 :: shared_ptr
- 18. 私は2つの機能</p> <pre><code>void foo() { std::cout << 1 << std::endl; } void bar() { std::cout << 2 << std::endl; } </code></pre> <p>をお持ちの場合は2個の関数のC++
- 19. ストリーム "<<"と書き込みの相違点
- 20. <semaphore.h>との相違点<sys/sem.h>
- 21. ArrayList <>()とArrayList <>(){}の相違点
- 22. 'this'ポインタを 'std :: stack <_Ty>'から 'std :: stack <_Ty>&'
- 23. <はstd :: reference_wrapper <T>>はstd ::ベクトルします<T>
- 24. std :: functionの比較<>
- 25. std :: function <>と標準関数ポインタの違いは?
- 26. 反復::ベクトル<std :: vector <char>>?
- 27. std :: logical_notとstd :: not1の違いは?
- 28. std :: set <VALUE、std :: owner_less <VALUE>>の目的は何ですか?
- 29. Cのstd :: aligned_storage <>に相当しますか?
- 30. 未定義テンプレートの暗黙的なインスタンス化 'std :: basic_string <char、std :: char_traits <char>、std :: allocator >'
'std :: is_signed'は型ですが、 'std :: numeric_limits :: is_signed'メンバは単なる値です。メタプログラミングでは、前者を持つ方がはるかに便利であり、より一貫性があります。 –
Xeo
実際には 'std :: is_signed :: value'を実際に使用します。 'std :: is_signed 'をどこで直接使用しますか? –
しかし、それらの結果は今までと異なるのでしょうか? – smilingthax