std::is_signed<T>
和std::numeric_limits<T>::is_signed
都應該給出關於T
的簽名的答案。
爲什麼現在有兩個簽名指示符(即從C++ 11開始)?std :: is_signed之間的區別<T>和std :: numeric_limits <T> :: is_signed?
回答
我會冒險猜測唯一的區別是如果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)
更新:永遠在線見地霍華德Hinnant(欣南特)points out,雖然std::numeric_limits<>
可以合法,專業,沒有什麼<type_traits>
被允許除非另有規定,否則專門化,並且is_signed
未被指定爲可專門化。
因此,std::numeric_limits<T>::is_signed
可能爲用戶定義類型的返回true
(如果它被專業),但std::is_signed<T>::value
將始終爲用戶定義類型返回false
。
您可以專注於' std :: numeric_limits
@DavidHammen:不,限制在那裏,但不適用於專業化。你可以在'std'中專門化現有的模板,你不能添加你自己的東西。 – 2013-03-09 01:04:45
@DavidHammen:在命名空間'std'中完全專門化模板總是合法的,只是不能部分專門化類模板或重載函數/函數模板。 – ildjarn 2013-03-09 01:04:57
- 1. 是std :: is_signed <bool> ::值保證返回false?
- 2. std :: logical_not和std :: not1之間的區別?
- 3. std :: is_integer和std :: is_integral之間的區別?
- 4. std :: regex_match和std :: regex_search之間的區別?
- 5. std :: uninitialized_copy和std :: copy之間的區別?
- 6. std :: mutex和std :: shared_mutex之間的區別
- 7. std :: cout << x;和std :: cout << x << std :: endl;?
- 8. double.Epsilon與std :: numeric_limits <double> :: min()
- 9. std ::在std :: string和std :: vector之間移動<unsigned char>
- 10. std :: to_string,boost :: to_string和boost :: lexical_cast <std::string>有什麼區別?
- 11. vector :: begin()和std :: begin()之間的區別
- 12. std :: endl和\ n之間的區別
- 13. std :: exception和「...」之間的區別
- 14. std :: result_of和decltype之間的區別
- 15. std :: array和boost :: array之間的區別
- 16. 模板和std :: numeric_limits
- 17. Rails:<%=和<%==之間的區別?
- 18. <?php和<?之間的區別
- 19. Ruby中+和<<之間的區別
- 20. C++:std :: shared_ptr <T>和std :: shared_ptr <T const>有什麼區別?
- 21. setbase(8)和std :: cout << std :: oct
- 22. '-std'和'--std'編譯器標記之間的區別
- 23. std :: string name和std :: string&name之間的C++區別
- 24. 在std :: bitset和std :: vector之間轉換<bool>
- 25. 警告C4003和錯誤C2589和C2059:x = std :: numeric_limits <int> :: max();
- 26. 來自標準<memory>文件的boost :: shared_ptr和std :: shared_ptr之間的區別
- 27. std :: numeric_limits :: digits10 <float>和點後的精度
- 28. C++ std :: lock和std :: unique_lock之間有什麼區別?
- 29. std :: strtol和std :: stoi之間有什麼區別?
- 30. std :: condition_variable和std :: condition_variable_any之間有什麼區別?
'std :: is_signed'是一種類型,而'std :: numeric_limits :: is_signed'成員只是一個值。在元編程中,讓前者更方便,也更一致。 –
Xeo
2013-03-09 00:36:04
那麼你實際上使用'std :: is_signed :: value'。你會直接在哪裏使用'std :: is_signed '? –
2013-03-09 00:37:14
但是他們的結果是否有所不同? – smilingthax 2013-03-09 00:38:29