W większości przypadków w programowaniu konkurencyjnym istnieje potrzeba przypisania zmiennej maksymalnej lub minimalnej wartości, jaką może pomieścić typ danych, ale zapamiętanie tak dużej i dokładnej liczby okazuje się trudnym zadaniem. Dlatego C++ ma pewne makra reprezentujące te liczby, dzięki czemu można je bezpośrednio przypisać do zmiennej bez konieczności wpisywania całej liczby.
The
Rzućmy okiem na przykład:
C++#include // for int char macros #include // for float double macros #include using namespace std; int main() { // Displaying ranges with the help of macros cout << 'char ranges from: ' << CHAR_MIN << ' to ' << CHAR_MAX << endl; cout << 'nnshort int ranges from: ' << SHRT_MIN << ' to ' << SHRT_MAX << endl; cout << 'nint ranges from: ' << INT_MIN << ' to ' << INT_MAX << endl; cout << 'nlong int ranges from: ' << LONG_MIN << ' to ' << LONG_MAX << endl; cout << 'nfloat ranges from: ' << FLT_MIN << ' to ' << FLT_MAX << endl; return 0; }
Wyjście
metoda Java
char ranges from: -128 to 127
nshort int ranges from: -32768 to 32767
int ranges from: -2147483648 to 2147483647
long int ranges from: -9223372036854775808 to 9223372036854775807
float ranges from: 1.17549e-38 to 3.40282e+38
Typy danych i ich makra zakresu
Lista niektórych makr typu danych znajduje się poniżej:
Typ danych | Zakres | Makro dla wartości minimalnej | Makro dla wartości maksymalnej |
---|---|---|---|
zwęglać | -128 do +127 | Char_min | CHAR_MAX |
krótki znak | -128 do +127 | SCHAR_MIN | SCHAR_MAX |
znak bez znaku | 0 do 255 | -- | Latanie_maks |
krótki wew | -32768 do +32767 | SHRT_MIN | SHRT_MAX |
krótki int bez znaku | 0 do 65535 | -- | USHRT_MAX |
wew | -2147483648 do +2147483647 | INT_MIN jeśli jeszcze, jeśli jeszcze Java | INT_MAX |
bez znaku int | 0 do 4294967295 | -- | UINT_MAX |
długi wew | -9223372036854775808 do +9223372036854775807 | DŁUGIE_MIN | DŁUGIE_MAX |
długi int bez znaku | 0 do 18446744073709551615 | -- | Usong_Max |
długi długi wew | -9223372036854775808 do +9223372036854775807 | Statek_min | LLONG_MAX |
bez znaku długi długi int | 0 do 18446744073709551615 | -- | ULLONG_MAX |
platforma | 1.17549e-38 do 3.40282e+38 | Flt_min | FLT_MAX |
pływak (ujemny) | -1.17549e-38 do -3.40282e+38 | -Lt_min | -FLT_MAX |
podwójnie | 2.22507e-308 do 1.79769e+308 | DBL_MIN program do dziedziczenia w Pythonie | DBL_MAX |
podwójne (ujemne) | -2.22507e-308 do -1.79769e+308 | -DBL_MIN | -DBL_MAX |
Ograniczenia typów danych we współczesnym C++
Powyższe podejście makro dla górnych i dolnych granic typu danych to stare podejście do języka C odziedziczone przez C++. Ale C++ ma również własną metodę dostarczania programistom tych samych informacji.
C++ oferuje limity_numeryczne<> class jako nowoczesna alternatywa dla tych makr. Ten szablon zapewnia bardziej obiektowe podejście do uzyskiwania dostępu do limitów typów danych. Jest zdefiniowany wewnątrz
Rzućmy okiem na przykład:
C++#include #include using namespace std; int main() { // Displaying ranges with the help of macros cout << 'short int ranges from: ' << numeric_limits<short int>::min() << ' to ' << numeric_limits<short int>::max() << endl; cout << 'nint ranges from: ' << numeric_limits<int>::min() << ' to ' << numeric_limits<int>::max() << endl; cout << 'nlong int ranges from: ' << numeric_limits<long>::min() << ' to ' << numeric_limits<long>::max() << endl; cout << 'nfloat ranges from: ' << numeric_limits<float>::min() << ' to ' << numeric_limits<float>::max() << endl; return 0; }
Wyjście
short int ranges from: -32768 to 32767
int ranges from: -2147483648 to 2147483647
long int ranges from: -9223372036854775808 to 9223372036854775807
float ranges from: 1.17549e-38 to 3.40282e+38
Zaleca się stosowanie tego podejścia do znajdowania górnej i dolnej granicy typu danych zamiast makr, ponieważ jest ono bezpieczniejsze i czytelniejsze w porównaniu z podejściem opartym na makrach.