Typy wbudowane (C++)

Wbudowane typy (nazywane również typami podstawowymi) są określane przez standard języka C++ i są wbudowane w kompilator. Wbudowane typy nie są definiowane w żadnym pliku nagłówkowym. Typy wbudowane są podzielone na trzy główne kategorie: całkowite, zmiennoprzecinkowe i void. Typy całkowite reprezentują liczby całkowite. Typy zmiennoprzecinkowe mogą określać wartości, które mogą mieć części ułamkowe. Większość wbudowanych typów jest traktowana jako odrębne typy przez kompilator. Jednak niektóre typy są synonimami lub traktowane jako równoważne typy przez kompilator.

Typ pustki

Typ void opisuje pusty zestaw wartości. Nie można określić zmiennej typu void . Typ void jest używany głównie do deklarowania funkcji, które nie zwracają żadnych wartości lub deklarują ogólne wskaźniki do nietypowych lub arbitralnie wpisanych danych. Dowolne wyrażenie można jawnie przekonwertować lub rzutować na typ void. Jednak takie wyrażenia są ograniczone do następujących zastosowań:

  • Instrukcja wyrażenia. (Aby uzyskać więcej informacji, zobacz Wyrażenia.

  • Lewy operand operatora przecinka. (Aby uzyskać więcej informacji, zobacz Operator przecinka).

  • Drugi lub trzeci operand operatora warunkowego (? :). (Aby uzyskać więcej informacji, zobacz Wyrażenia z operatorem warunkowym).

std::nullptr_t

Słowo kluczowe nullptr jest stałą wskaźnika null typu std::nullptr_t, która jest konwertowana na dowolny nieprzetworzonego typu wskaźnika. W celu uzyskania więcej informacji, zobacz następujący temat: nullptr.

Typ logiczny

Typ bool może mieć wartości true i false. Rozmiar bool typu jest specyficzny dla implementacji. Zobacz Rozmiary wbudowanych typów dla szczegółów implementacji specyficznych dla firmy Microsoft.

Typy znaków

Typ char jest typem reprezentacji znaków, który efektywnie koduje elementy członkowskie podstawowego zestawu znaków wykonywania. Kompilator języka C++ traktuje zmienne typu char, signed chari unsigned char jako o różnych typach.

Specyficzne dla firmy Microsoft: zmienne typu char są domyślnie promowane tak int , jakby z typu signed char , chyba że /J jest używana opcja kompilacji. W takim przypadku są traktowane jako typ unsigned char i są promowane do int bez rozszerzenia podpisywania.

Zmienna typu wchar_t jest typem znaków wielobajtowych lub wielobajtowych. Użyj prefiksu L przed literałem znaku lub ciągu, aby określić typ znaku szerokiego.

Specyficzne dla firmy Microsoft: domyślnie wchar_t jest typem natywnym, ale można użyć /Zc:wchar_t- polecenia , aby utworzyć wchar_t definicję typu dla elementu unsigned short. Typ __wchar_t jest synonimem specyficznym dla firmy Microsoft dla typu natywnego wchar_t .

Typ char8_t jest używany do reprezentacji znaków UTF-8. Ma tę samą reprezentację co unsigned charelement , ale jest traktowany jako odrębny typ przez kompilator. Typ char8_t jest nowy w języku C++20. Specyficzne dla firmy Microsoft: użycie opcji wymaga opcji kompilatora lub nowszej char8_t/std:c++20 (na przykład /std:c++latest).

Typ char16_t jest używany do reprezentacji znaków UTF-16. Musi być wystarczająco duży, aby reprezentować dowolną jednostkę kodu UTF-16. Jest on traktowany jako odrębny typ przez kompilator.

Typ char32_t jest używany do reprezentacji znaków UTF-32. Musi być wystarczająco duży, aby reprezentować dowolną jednostkę kodu UTF-32. Jest on traktowany jako odrębny typ przez kompilator.

Typy zmiennoprzecinkowe

Typy zmiennoprzecinkowe używają reprezentacji IEEE-754 w celu zapewnienia przybliżenia wartości ułamkowych w szerokim zakresie wielkości. W poniższej tabeli wymieniono typy zmiennoprzecinkowe w języku C++ oraz ograniczenia porównawcze dotyczące rozmiarów typów zmiennoprzecinkowych. Te ograniczenia są wymagane przez standard C++ i są niezależne od implementacji firmy Microsoft. Bezwzględny rozmiar wbudowanych typów zmiennoprzecinkowych nie jest określony w standardzie.

Type Zawartość
float Typ float to najmniejszy typ zmiennoprzecinkowy w języku C++.
double Typ double to typ zmiennoprzecinkowy, który jest większy lub równy typowi float, ale krótszy niż lub równy rozmiarowi typu long double.
long double Typ long double jest typem zmiennoprzecinkowym, który jest większy lub równy typowi double.

Specyficzne dla firmy Microsoft: reprezentacja long double i double jest identyczna. long double Jednak i double są traktowane jako odrębne typy przez kompilator. Kompilator języka Microsoft C++ używa reprezentacji zmiennoprzecinkowych IEEE-754 4 i 8-bajtowych. Aby uzyskać więcej informacji, zobacz Reprezentacja zmiennoprzecinkowa IEEE.

Typy całkowite

Typ int jest domyślnym typem podstawowej liczby całkowitej. Może reprezentować wszystkie liczby całkowite w zakresie specyficznym dla implementacji.

Reprezentacja liczby całkowitej ze znakiem jest taka, która może zawierać zarówno wartości dodatnie, jak i ujemne. Jest on używany domyślnie lub gdy signed słowo kluczowe modyfikatora jest obecne. Słowo unsigned kluczowe modyfikatora określa niepodpisaną reprezentację, która może zawierać tylko wartości inne niż ujemne.

Modyfikator rozmiaru określa szerokość w bitach używanej reprezentacji całkowitej. Język obsługuje shortmodyfikatory , longi long long . short Typ musi mieć co najmniej 16 bitów szerokości. long Typ musi mieć co najmniej 32 bity szerokości. long long Typ musi mieć co najmniej 64 bity szerokości. Standard określa relację rozmiaru między typami całkowitymi:

1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)

Implementacja musi zachować zarówno minimalne wymagania dotyczące rozmiaru, jak i relację rozmiaru dla każdego typu. Jednak rzeczywiste rozmiary mogą się różnić w zależności od implementacji. Zobacz Rozmiary wbudowanych typów dla szczegółów implementacji specyficznych dla firmy Microsoft.

Słowo int kluczowe może zostać pominięte, gdy signedokreślono modyfikatory rozmiaru lub , unsignedlub . Modyfikatory i int typ, jeśli istnieje, mogą pojawić się w dowolnej kolejności. Na przykład short unsigned i unsigned int short odwołaj się do tego samego typu.

Synonimy typów liczb całkowitych

Następujące grupy typów są uznawane za synonimy kompilatora:

  • short, short int, signed short, signed short int

  • unsigned short, unsigned short int

  • int, signed, signed int

  • unsigned, unsigned int

  • long, long int, signed long, signed long int

  • unsigned long, unsigned long int

  • long long, long long int, signed long long, signed long long int

  • unsigned long long, unsigned long long int

Typy całkowite specyficzne dla firmy Microsoft obejmują określone typy __int8szerokości, __int16, __int32i __int64 . Te typy mogą używać signed modyfikatorów i unsigned . Typ __int8 danych jest synonimem typu char, __int16 jest synonimem typu , __int32 jest synonimem typu , jest synonimem typu shorti __int64 jest synonimem typu intlong long.

Rozmiary wbudowanych typów

Większość typów wbudowanych ma rozmiary zdefiniowane przez implementację. W poniższej tabeli wymieniono ilość miejsca wymaganego do przechowywania wbudowanych typów w języku Microsoft C++. W szczególności long jest to 4 bajty nawet w 64-bitowych systemach operacyjnych.

Type Size
bool, char, char8_t, unsigned char, signed char, __int8 1 bajt
char16_t, __int16, short, unsigned short, wchar_t, __wchar_t 2 bajty
char32_t, float, __int32, int, unsigned int, long, unsigned long 4 bajty
double, __int64, long double, long long, unsigned long long 8 bajtów

Zobacz Zakresy typów danych, aby uzyskać podsumowanie zakresu wartości każdego typu.

Aby uzyskać więcej informacji na temat konwersji typów, zobacz Konwersje standardowe.

Zobacz też

Zakresy typów danych