C++ åèæå
- C++11
- C++14
- C++17
- C++20
- C++ ç¼è¯å¨æ¯ææ åµè¡¨
- ç¬ç«ä¸å®¿ä¸»å®ç°
- C++ è¯è¨
- C++ å ³é®è¯
- é¢å¤çå¨
- C++ æ ååºå¤´æä»¶
- å ·åè¦æ±
- åè½ç¹æ§æµè¯ (C++20)
- å·¥å ·åº
- ç±»åæ¯æï¼åºæ¬ç±»åãRTTIãç±»åç¹æ§ï¼
- std::numeric_limits
- std::numeric_limits<T>::is_integer
- std::numeric_limits<T>::is_exact
- std::numeric_limits<T>::is_specialized
- std::numeric_limits<T>::is_signed
- std::numeric_limits<T>::has_infinity
- std::numeric_limits<T>::has_quiet_NaN
- std::numeric_limits<T>::has_signaling_NaN
- std::numeric_limits<T>::has_denorm
- std::numeric_limits<T>::has_denorm_loss
- std::numeric_limits<T>::round_style
- std::numeric_limits<T>::is_iec559
- std::numeric_limits<T>::is_bounded
- std::numeric_limits<T>::is_modulo
- std::numeric_limits<T>::digits
- std::numeric_limits<T>::digits10
- std::numeric_limits<T>::max_digits10
- std::numeric_limits<T>::radix
- std::numeric_limits<T>::min_exponent
- std::numeric_limits<T>::min_exponent10
- std::numeric_limits<T>::max_exponent10
- std::numeric_limits<T>::max_exponent10
- std::numeric_limits<T>::traps
- std::numeric_limits<T>::tinyness_before
- std::numeric_limits<T>::min
- std::numeric_limits<T>::lowest
- std::numeric_limits<T>::max
- std::numeric_limits<T>::epsilon
- std::result_of, std::invoke_result
- std::integral_constant
- std::is_constant_evaluated
- std::max_align_t
- offsetof
- NULL
- std::bad_typeid
- std::bad_cast
- std::type_info
- std::ptrdiff_t
- std::byte
- std::conjunction
- std::disjunction
- std::negation
- std::is_swappable_with, std::is_swappable, std::is_nothrow_swappable_with, std::is_nothrow_swappable
- std::is_invocable, std::is_invocable_r, std::is_nothrow_invocable, std::is_nothrow_invocable_r
- std::is_aggregate
- std::has_unique_object_representations
- std::endian
- std::remove_cvref
- std::type_index
- C æ°å¼æéæ¥å£
- å®å®½æ´æ°ç±»å (C++11 èµ·)
- std::is_bounded_array
- std::is_unbounded_array
- std::size_t
- std::nullptr_t
- std::is_integral
- std::rank
- std::is_void
- std::is_null_pointer
- std::is_array
- std::is_pointer
- std::is_enum
- std::is_union
- std::is_class
- std::is_function
- std::is_object
- std::is_scalar
- std::is_compound
- std::is_floating_point
- std::is_fundamental
- std::is_arithmetic
- std::is_reference
- std::is_lvalue_reference
- std::is_rvalue_reference
- std::is_member_pointer
- std::is_member_object_pointer
- std::is_member_function_pointer
- std::is_const
- std::is_volatile
- std::is_empty
- std::is_polymorphic
- std::is_final
- std::is_abstract
- std::is_trivial
- std::is_trivially_copyable
- std::is_standard_layout
- std::is_literal_type
- std::is_pod
- std::is_signed
- std::is_unsigned
- std::is_constructible, std::is_trivially_constructible, std::is_nothrow_constructible
- std::is_default_constructible, std::is_trivially_default_constructible, std::is_nothrow_default_constructible
- std::is_copy_constructible, std::is_trivially_copy_constructible, std::is_nothrow_copy_constructible
- std::is_move_constructible, std::is_trivially_move_constructible, std::is_nothrow_move_constructible
- std::is_assignable, std::is_trivially_assignable, std::is_nothrow_assignable
- std::is_copy_assignable, std::is_trivially_copy_assignable, std::is_nothrow_copy_assignable
- std::is_move_assignable, std::is_trivially_move_assignable, std::is_nothrow_move_assignable
- std::is_destructible, std::is_trivially_destructible, std::is_nothrow_destructible
- std::has_virtual_destructor
- std::is_same
- std::is_base_of
- std::is_convertible, std::is_nothrow_convertible
- std::is_layout_compatible
- std::is_pointer_interconvertible_base_of
- std::is_pointer_interconvertible_with_class
- std::is_corresponding_member
- std::alignment_of
- std::extent
- std::remove_cv, std::remove_const, std::remove_volatile
- std::add_cv, std::add_const, std::add_volatile
- std::make_signed
- std::make_unsigned
- std::remove_reference
- std::add_lvalue_reference, std::add_rvalue_reference
- std::remove_pointer
- std::add_pointer
- std::remove_extent
- std::remove_all_extents
- std::aligned_storage
- std::aligned_union
- std::decay
- std::enable_if
- std::void_t
- std::conditional
- std::common_type
- std::common_reference
- std::underlying_type
- std::type_identity
- 注é
- æ¦å¿µåº (C++20)
- é误å¤ç
- 卿å å管ç
- æ¥æåæ¶é´å·¥å ·
- å符串åº
- 容å¨åº
- è¿ä»£å¨åº
- èå´åº (C++20)
- ç®æ³åº
- æ°å¼åº
- è¾å ¥/è¾åºåº
- æä»¶ç³»ç»åº
- æ¬å°ååº
- æ£å表达å¼åº
- ååæä½åº
- çº¿ç¨æ¯æåº
- å®éªæ§ C++ ç¹æ§
- æç¨çèµæº
- ç´¢å¼
- std 符å·ç´¢å¼
- åç¨æ¯æ (C++20)
- C++ å ³é®è¯
ä½ç½®ï¼é¦é¡µ > C++ åèæå >ç±»åæ¯æï¼åºæ¬ç±»åãRTTIãç±»åç¹æ§ï¼ > std::numeric_limits
std::numeric_limits
numeric_limits ç±»æ¨¡æ¿æä¾æ¥è¯¢åç§ç®æ¯ç±»å屿§çæ ååæ¹å¼ï¼ä¾å¦ int ç±»åçæå¤§å¯è½å¼æ¯ std::numeric_limits<int>::max() ï¼ã
éè¿ numeric_limits 模æ¿çç¹åæä¾æ¤ä¿¡æ¯ãæ ååºä¸ºææç®æ¯ç±»åå¶å®å¯ç¨çç¹åï¼
| å®ä¹äºå¤´æä»¶ <limits>
|
||
| template<> class numeric_limits<bool>; template<> class numeric_limits<char>; |
||
å¦å¤ï¼å¯¹äºæ¯ä¸ªç®æ¯ç±»åçæ¯ä¸ª cv éå®çæ¬åå¨ç¹åï¼çåäºééå®çç¹åï¼ä¾å¦æä¾ std::numeric_limits<const int> ã std::numeric_limits<volatile int> å std::numeric_limits<const volatile int> ï¼ä¸å®ä»¬çä»·äº std::numeric_limits<int> ã
ä½ä¸ºç®æ¯ç±»åå«åçæ ååºç±»åï¼ä¾å¦ std::size_t æ std::streamsize ï¼ä¹å¯ä»¥ç¨ std::numeric_limits ç±»åç¹æ§æ£æµã
éç®æ¯æ åç±»åï¼ä¾å¦ std::complex<T> æ std::nullptr_t ï¼æ ç¹åã
å®ç°å¯ä»¥å¯¹å®ç°æå®çç±»åæä¾ std::numeric_limits çç¹åï¼ä¾å¦ GCC æä¾ std::numeric_limits<__int128> ãéæ ååºå¯ä»¥ä¸ºåºææä¾çç±»åæ·»å ç¹åï¼ä¾å¦ OpenEXR 为 16 使µ®ç¹ç±»åæä¾ std::numeric_limits<half> ã
模æ¿åæ°
| T | - | è¦è·åæ°å¼å±æ§çç±»å |
æå常é
| [éæ] |
é´å« std::numeric_limits æ¯å¦ä¸ºè¯¥ç±»åç¹å (å ¬å¼éææå常é) |
| [éæ] |
é´å«æç¬¦å·ç±»å (å ¬å¼éææå常é) |
| [éæ] |
é´å«æ´æ°ç±»å (å ¬å¼éææå常é) |
| [éæ] |
é´å«å确表示çç±»å (å ¬å¼éææå常é) |
| [éæ] |
é´å«è½è¡¨ç¤ºç¹æ®å¼âæ£æ 穷大âçæµ®ç¹ç±»å (å ¬å¼éææå常é) |
| [éæ] |
é´å«è½è¡¨ç¤ºç¹æ®å¼âå®éçéæ°âï¼ NaN ï¼çæµ®ç¹ç±»å (å ¬å¼éææå常é) |
| [éæ] |
é´å«è½è¡¨ç¤ºç¹æ®å¼âåä¿¡çéæ°âï¼ NaN ï¼çæµ®ç¹ç±»å (å ¬å¼éææå常é) |
| [éæ] |
é´å«æµ®ç¹ç±»åæç¨ç鿣è§é£æ ¼ (å ¬å¼éææå常é) |
| [éæ] |
é´å«æµ®ç¹ç±»åæ¯å¦æ£æµç²¾åº¦æå¤±ä¸ºéæ£è§æå¤±ï¼èéä¸åç¡®ç»æ (å ¬å¼éææå常é) |
| [éæ] |
é´å«ç±»åæç¨çèå
¥æ¨¡å¼ (å ¬å¼éææå常é) |
| [éæ] |
é´å« IEC 559/IEEE 754 æµ®ç¹ç±»å (å ¬å¼éææå常é) |
| [éæ] |
é´å«è¡¨ç¤ºæéå¼éåçç±»å (å ¬å¼éææå常é) |
| [éæ] |
é´å«ä»¥æ¨¡ç®æ¯å¤ç溢åºçç±»å (å ¬å¼éææå常é) |
| [éæ] |
è½æ æ´æ¹å°è¡¨ç¤ºç radix 使° (å ¬å¼éææå常é) |
| [éæ] |
è½æ æ´æ¹å°è¡¨ç¤ºçåè¿å¶ä½æ° (å ¬å¼éææå常é) |
| [éæ] (C++11) |
åºå«æææ¤ç±»å弿éçåè¿å¶ä½æ° (å ¬å¼éææå常é) |
| [éæ] |
ç»å®ç±»åç表示æç¨çåºææ´æ°åº (å ¬å¼éææå常é) |
| [éæ] |
åºçè¯¥æ°æ¬¡å¹æ¯åæ³æ£è§æµ®ç¹å¼çæå°è´æ°å ä¸ (å ¬å¼éææå常é) |
| [éæ] |
10 çè¯¥æ°æ¬¡å¹æ¯åæ³æ£è§æµ®ç¹å¼çæå°è´æ° (å ¬å¼éææå常é) |
| [éæ] |
åºçè¯¥æ°æ¬¡å¹æ¯åæ³æéæµ®ç¹å¼çæå¤§æ´æ°å ä¸ (å ¬å¼éææå常é) |
| [éæ] |
10 çè¯¥æ°æ¬¡å¹æ¯åæ³æéæµ®ç¹å¼çæå¤§æ´æ° (å ¬å¼éææå常é) |
| [éæ] |
é´å«å¯è½å¯¼è´ç®æ¯è¿ç®åºç°é·é±çç±»å (å ¬å¼éææå常é) |
| [éæ] |
é´å«æ£æµèå
¥åæ¯å¦éæ£è§çæµ®ç¹ç±»å (å ¬å¼éææå常é) |
æå彿°
| [éæ] |
è¿åç»å®ç±»åçæå°æéå¼ (å ¬å¼éææå彿°) |
| [éæ] (C++11) |
è¿åç»å®ç±»åçæä½æéå¼ (å ¬å¼éææå彿°) |
| [éæ] |
è¿åç»å®ç±»åçæå¤§æéå¼ (å ¬å¼éææå彿°) |
| [éæ] |
è¿å 1.0 ä¸ç»å®ç±»åçä¸ä¸ªå¯è¡¨ç¤ºå¼çå·® (å ¬å¼éææå彿°) |
| [éæ] |
è¿åç»å®æµ®ç¹ç±»åçæå¤§èå
¥è¯¯å·® (å ¬å¼éææå彿°) |
| [éæ] |
è¿åç»å®ç±»åçæ£æ ç©·å¤§å¼ (å ¬å¼éææå彿°) |
| [éæ] |
è¿åç»å®æµ®ç¹ç±»åçå®é NaN å¼ (å ¬å¼éææå彿°) |
| [éæ] |
è¿åç»å®æµ®ç¹ç±»åçåä¿¡ç NaN (å ¬å¼éææå彿°) |
| [éæ] |
è¿åç»å®æµ®ç¹ç±»åçæå°æ£éæ£è§å¼ (å ¬å¼éææå彿°) |
è¾ å©ç±»
| æç¤ºæµ®ç¹èå
¥æ¨¡å¼ (æä¸¾) | |
| æç¤ºæµ®ç¹éè§æ ¼åæ¨¡å¼ (æä¸¾) |
ä¸ C åºå®å¸¸éçå ³ç³»
| ç¹å | æå | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
min()
|
lowest()(C++11) |
max()
|
epsilon()
|
digits
|
digits10
|
min_exponent
|
min_exponent10
|
max_exponent
|
max_exponent10
|
radix
| |
numeric_limits< bool >
|
2 | ||||||||||
numeric_limits< char >
|
CHAR_MIN | CHAR_MIN | CHAR_MAX | 2 | |||||||
numeric_limits< signed char >
|
SCHAR_MIN | SCHAR_MIN | SCHAR_MAX | 2 | |||||||
numeric_limits< unsigned char >
|
â0â | â0â | UCHAR_MAX | 2 | |||||||
numeric_limits< wchar_t >
|
WCHAR_MIN | WCHAR_MIN | WCHAR_MAX | 2 | |||||||
numeric_limits< char8_t >
|
â0â | â0â | UCHAR_MAX | 2 | |||||||
numeric_limits< char16_t >
|
â0â | â0â | UINT_LEAST16_MAX | 2 | |||||||
numeric_limits< char32_t >
|
â0â | â0â | UINT_LEAST32_MAX | 2 | |||||||
numeric_limits< short >
|
SHRT_MIN | SHRT_MIN | SHRT_MAX | 2 | |||||||
numeric_limits< unsigned short >
|
â0â | â0â | USHRT_MAX | 2 | |||||||
numeric_limits< int >
|
INT_MIN | INT_MIN | INT_MAX | 2 | |||||||
numeric_limits< unsigned int >
|
â0â | â0â | UINT_MAX | 2 | |||||||
numeric_limits< long >
|
LONG_MIN | LONG_MIN | LONG_MAX | 2 | |||||||
numeric_limits< unsigned long >
|
â0â | â0â | ULONG_MAX | 2 | |||||||
numeric_limits< long long >
|
LLONG_MIN | LLONG_MIN | LLONG_MAX | 2 | |||||||
numeric_limits< unsigned long long >
|
â0â | â0â | ULLONG_MAX | 2 | |||||||
numeric_limits< float >
|
FLT_MIN | -FLT_MAX | FLT_MAX | FLT_EPSILON | FLT_MANT_DIG | FLT_DIG | FLT_MIN_EXP | FLT_MIN_10_EXP | FLT_MAX_EXP | FLT_MAX_10_EXP | FLT_RADIX |
numeric_limits< double >
|
DBL_MIN | -DBL_MAX | DBL_MAX | DBL_EPSILON | DBL_MANT_DIG | DBL_DIG | DBL_MIN_EXP | DBL_MIN_10_EXP | DBL_MAX_EXP | DBL_MAX_10_EXP | FLT_RADIX |
numeric_limits< long double >
|
LDBL_MIN | -LDBL_MAX | LDBL_MAX | LDBL_EPSILON | LDBL_MANT_DIG | LDBL_DIG | LDBL_MIN_EXP | LDBL_MIN_10_EXP | LDBL_MAX_EXP | LDBL_MAX_10_EXP | FLT_RADIX |
示ä¾
#include <limits> #include <iostream> Â int main() { std::cout << "type\tlowest()\tmin()\t\tmax()\n\n"; Â std::cout << "uchar\t" << +std::numeric_limits<unsigned char>::lowest() << '\t' << '\t' << +std::numeric_limits<unsigned char>::min() << '\t' << '\t' << +std::numeric_limits<unsigned char>::max() << '\n'; std::cout << "int\t" << std::numeric_limits<int>::lowest() << '\t' << std::numeric_limits<int>::min() << '\t' << std::numeric_limits<int>::max() << '\n'; std::cout << "float\t" << std::numeric_limits<float>::lowest() << '\t' << std::numeric_limits<float>::min() << '\t' << std::numeric_limits<float>::max() << '\n'; std::cout << "double\t" << std::numeric_limits<double>::lowest() << '\t' << std::numeric_limits<double>::min() << '\t' << std::numeric_limits<double>::max() << '\n'; }
å¯è½çè¾åºï¼
type lowest() min() max() Â uchar 0 0 255 int -2147483648 -2147483648 2147483647 float -3.40282e+38 1.17549e-38 3.40282e+38 double -1.79769e+308 2.22507e-308 1.79769e+308