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::numeric_limits<>
법적으로 특화 될 수있는 동안 항상 지식이 하워드 Hinnant points out이 <type_traits>
에 아무 것도 허용되지 않는다는 : std::is_signed<T>
가 나타내는 조건이
is_arithmetic<T>::value && T(-1) < T(0)
이 이
이 업데이트 인 것처럼
보인다 달리 명시되지 않는 한 전문화되어야하며 is_signed
은 전문화 할 수없는 것으로 지정되어야합니다.
따라서, std::numeric_limits<T>::is_signed
수도 (는 전문되었습니다 않은 경우) 사용자 정의 유형에 대한 대가 true
하지만 std::is_signed<T>::value
는 항상 사용자 정의 유형 false
를 반환합니다.
' std :: numeric_limits
@DavidHammen : 아니요, 제한이 있지만 전문화에는 적용되지 않습니다. 'std'에있는 기존 템플릿을 전문화 할 수 있습니다. 단지 자신의 물건을 추가 할 수 없습니다. –
@DavidHammen : 클래스 템플릿이나 오버로드 함수/함수 템플릿을 부분적으로 특수화하지 않고 네임 스페이스'std'에서 템플릿을 완전히 전문화하는 것은 항상 합법적입니다. – ildjarn
- 1. 템플릿 및 std :: numeric_limits
- 2. Kerberos TGT 동작
- 3. CAS : TGT 복호화
- 4. std :: cout << std :: cin은 무엇을합니까?
- 5. double.Epsilon vs std :: numeric_limits <double> :: min()
- 6. std :: set와 std :: map의 차이점
- 7. std :: hash <std :: function> 정의
- 8. 'std :: vector <std :: basic_string <char>> *'에서 'const std :: vector <std :: basic_string <char>'& '
- 9. std :: mutex 잠금 함수와 std :: lock_guard의 차이점 <std::mutex>?
- 10. std :: unique_lock <std::mutex> 또는 std :: lock_guard <std::mutex>?
- 11. 오류 C2440 : '=': 'std :: list <std :: string, std :: allocator <_Ty>>'to 'std :: string *'
- 12. std :: vector <std :: pair <T,U>>
- 13. std :: vector <std :: reference_wrapper >
- 14. std :: vector <std::string> 충돌
- 15. std :: unique() 사용하여 std :: vector <std :: unordered_set >
- 16. itdate std :: vector <std :: vector <char>>?
- 17. std :: list <std :: unique_ptr <classname>>
- 18. C++ 클래스의 필드와 메서드 std :: numeric_limits
- 19. std :: sort on std :: vector <std::string>
- 20. std :: vector <std :: pair <int, std :: pair <Bone, std :: string>> int로 정렬하지 않습니까?
- 21. C++에서 std :: unique_ptr과 std :: shared_ptr의 차이점
- 22. CAS 서버 TGT 쿠키를 어떻게 보호해야합니까?
- 23. 서비스 주체를 사용하여 TGT 가져 오기
- 24. std :: vector <std :: pair <std :: string, bool >>을 문자열로 정렬 하시겠습니까?
- 25. 경고 C4003 및 C2589 및 C2059 오류 : x = std :: numeric_limits <int> :: max();
- 26. std :: function <> 비교하기
- 27. 그냥 std :: cout << "안녕하세요"<< std :: endl 프로그램에서 제거하여 OpenGL을 충돌이
- 28. std :: vector <std :: unique_ptr <>>을 std :: thread에 전달할 수 없습니다.
- 29. std :: string 이름과 std :: string 및 이름 사이의 C++ 차이점
- 30. pthread_cond_t와 std :: condition_variable의 차이점
'std :: is_signed'은 타입이고'std :: numeric_limits :: is_signed' 멤버는 값입니다. 메타 프로그래밍에서 전자 프로그래밍을 사용하는 것이 훨씬 편리하며 일관성도 있습니다. –
Xeo
실제로'std :: is_signed :: value'을 실제로 사용합니다. 'std :: is_signed '를 직접 사용 하시겠습니까? –
그러나 그 결과가 다른가? – smilingthax