Tipi predefiniti (C++)

I tipi predefiniti (detti anche tipi fondamentali) vengono specificati dallo standard del linguaggio C++ e sono incorporati nel compilatore. I tipi predefiniti non sono definiti in alcun file di intestazione. I tipi predefiniti sono suddivisi in tre categorie principali: integrale, a virgola mobile e void. I tipi integrali rappresentano numeri interi. I tipi a virgola mobile possono specificare valori che possono avere parti frazionarie. La maggior parte dei tipi predefiniti viene considerata come tipi distinti dal compilatore. Tuttavia, alcuni tipi sono sinonimi o considerati come tipi equivalenti dal compilatore.

Tipo void

Il void tipo descrive un set vuoto di valori. Non è possibile specificare alcuna variabile di tipo void . Il void tipo viene usato principalmente per dichiarare funzioni che non restituiscono valori o per dichiarare puntatori generici a dati non tipizzati o tipizzati in modo arbitrario. Qualsiasi espressione può essere convertita in modo esplicito o può esserne eseguito il cast al tipo void. Tuttavia, l'uso di tali espressioni è limitato ai seguenti elementi:

  • L'istruzione di un'espressione Per altre informazioni, vedere Espressioni.

  • L'operando sinistro dell'operatore virgola Per altre informazioni, vedere Operatore virgola.

  • Il secondo o il terzo operando dell'operatore condizionale (? :) Per altre informazioni, vedere Espressioni con l'operatore condizionale.

std::nullptr_t

La parola chiave nullptr è una costante del puntatore Null di tipo std::nullptr_t, che è convertibile in qualsiasi tipo di puntatore non elaborato. Per ulteriori informazioni, vedere nullptr.

Tipi booleani

Il bool tipo può avere valori true e false. Le dimensioni del bool tipo sono specifiche dell'implementazione. Per informazioni dettagliate sull'implementazione specifiche di Microsoft, vedere Dimensioni dei tipi predefiniti.

Tipi di caratteri

Il char tipo è un tipo di rappresentazione di caratteri che codifica in modo efficiente i membri del set di caratteri di esecuzione di base. Il compilatore C++ considera le variabili di tipo char, signed chare unsigned char come se avessero tipi differenti.

Specifico di Microsoft: le variabili di tipo char vengono alzate di livello come int se dal tipo per signed char impostazione predefinita, a meno che non venga usata l'opzione /J di compilazione. In questo caso, vengono considerati come tipo unsigned char e vengono promossi a int senza estensione del segno.

Una variabile di tipo è un tipo wchar_t di carattere wide o multibyte. Usare il prefisso prima di L un carattere o un valore letterale stringa per specificare il tipo di caratteri wide.

Specifico di Microsoft: per impostazione predefinita, wchar_t è un tipo nativo, ma è possibile usare /Zc:wchar_t- per impostare wchar_t un typedef per unsigned short. Il tipo __wchar_t è un sinonimo specifico di Microsoft per il tipo wchar_t nativo.

Il char8_t tipo viene usato per la rappresentazione di caratteri UTF-8. Ha la stessa rappresentazione di unsigned char, ma viene considerata come un tipo distinto dal compilatore. Il char8_t tipo è nuovo in C++20. Specifico di Microsoft: l'uso di richiede l'opzione del char8_t/std:c++20 compilatore o versioni successive (ad esempio /std:c++latest).

Il char16_t tipo viene usato per la rappresentazione di caratteri UTF-16. Deve essere sufficientemente grande da rappresentare qualsiasi unità di codice UTF-16. Viene considerato come un tipo distinto dal compilatore.

Il char32_t tipo viene usato per la rappresentazione di caratteri UTF-32. Deve essere sufficientemente grande da rappresentare qualsiasi unità di codice UTF-32. Viene considerato come un tipo distinto dal compilatore.

Tipi a virgola mobile

I tipi a virgola mobile usano una rappresentazione I edizione Enterprise E-754 per fornire un'approssimazione dei valori frazionari su un'ampia gamma di grandezza. Nella tabella seguente sono elencati i tipi a virgola mobile in C++ e le restrizioni comparative sulle dimensioni dei tipi a virgola mobile. Queste restrizioni sono imposte dallo standard C++ e sono indipendenti dall'implementazione di Microsoft. Le dimensioni assolute dei tipi a virgola mobile predefinite non sono specificate nello standard.

Digita Contenuto
float Il tipo float è il tipo a virgola mobile più piccolo in C++.
double Il tipo double è un tipo a virgola mobile che è maggiore o uguale a float, ma minore o uguale alla dimensione del tipo long double.
long double Il tipo long double è un tipo a virgola mobile maggiore o uguale al tipo double.

Specifico di Microsoft: la rappresentazione di long double e double è identica. Tuttavia, long double e double vengono considerati come tipi distinti dal compilatore. Il compilatore Microsoft C++ usa le rappresentazioni a virgola mobile a 4 e 8 byte edizione Enterprise E-754. Per altre informazioni, vedere Rappresentazione a virgola mobile I edizione Enterprise E.

Tipi integer

Il int tipo è il tipo integer di base predefinito. Può rappresentare tutti i numeri interi su un intervallo specifico dell'implementazione.

Una rappresentazione integer con segno è una che può contenere valori positivi e negativi. Viene usato per impostazione predefinita o quando è presente la signed parola chiave del modificatore. La unsigned parola chiave modifier specifica una rappresentazione senza segno che può contenere solo valori non negativi.

Un modificatore di dimensioni specifica la larghezza in bit della rappresentazione integer utilizzata. Il linguaggio supporta shorti modificatori , longe long long . Un short tipo deve avere una larghezza di almeno 16 bit. Un long tipo deve avere una larghezza di almeno 32 bit. Un long long tipo deve avere una larghezza di almeno 64 bit. Lo standard specifica una relazione di dimensione tra i tipi integrali:

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

Un'implementazione deve mantenere sia i requisiti di dimensione minima che la relazione di dimensione per ogni tipo. Tuttavia, le dimensioni effettive possono e possono variare tra le implementazioni. Per informazioni dettagliate sull'implementazione specifiche di Microsoft, vedere Dimensioni dei tipi predefiniti.

La int parola chiave può essere omessa quando unsignedsignedvengono specificati modificatori di dimensioni , o . I modificatori e int il tipo, se presenti, possono essere visualizzati in qualsiasi ordine. Ad esempio, short unsigned e unsigned int short fare riferimento allo stesso tipo.

Sinonimi di tipi integer

I gruppi di tipi seguenti sono considerati sinonimi dal compilatore:

  • 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

I tipi Integer specifici di Microsoft includono i tipi specifici__int8, , __int16__int32, e __int64 . Questi tipi possono usare i signed modificatori e unsigned . Il __int8 tipo di dati è sinonimo di tipo char, __int16 è sinonimo di tipo short, __int32 è sinonimo di tipo inte __int64 è sinonimo di tipo long long.

Dimensioni dei tipi predefiniti

La maggior parte dei tipi predefiniti ha dimensioni definite dall'implementazione. La tabella seguente elenca la quantità di spazio di archiviazione necessaria per i tipi predefiniti in Microsoft C++. In particolare, long è di 4 byte anche nei sistemi operativi a 64 bit.

Digita Dimensione
bool, char, char8_t, unsigned char, signed char, __int8 1 byte
char16_t, __int16, short, unsigned short, wchar_t, __wchar_t 2 byte
char32_t, float, __int32, int, unsigned int, long, unsigned long 4 byte
double, __int64, long double, long long, unsigned long long 8 byte

Per un riepilogo dell'intervallo di valori di ogni tipo, vedere Intervalli di tipi di dati.

Per altre informazioni sulla conversione dei tipi, vedere Conversioni standard.

Vedi anche

Intervalli di tipi di dati