Les programmeurs C++ ont accès à cinq types de données en C:void, int, float, double, et char.
Type | Description |
---|---|
void | aucun type |
int | entier |
float | nombre à virgule flottante (décimal) |
double | nombre à virgule flottante de précision double |
char | caractère |
Le C++ en définit deux de plus: bool et wchar_t.
Type | Description |
---|---|
bool | valeur booléenne; VRAI ou FAUX |
wchar_t | caractère étendu |
Plusieurs de ces types peuvent être modifiés en utilisant les mots-clés signed, unsigned, short, et long. Lorsqu'un de ces modifieurs de type est utilisé seul, le type par défaut est le type entier. Une liste complète des types de données possibles suit:
types entiers | |||
---|---|---|---|
bool | |||
char | |||
signed char | |||
unsigned char | |||
wchar_t | |||
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 | ||
types à virgule flottante | |||
float | |||
double | |||
long double | |||
types entiers supportés optionnellement | |||
long long | long long int | signed long long | signed long long int |
unsigned long long | unsigned long long int |
La taille et l'étendue d'un type de donnée dépend de l'architecture et du compilateur. Vous pouvez utiliser l'opérateur sizeof pour déterminer la taille d'un type de donnée (exprimée en octets). Cependant, beaucoup d'architectures implémentent les types de données d'une taille standard. Les entiers sont souvent codés sur 32 bits; un caractère (char) est codé sur 8 bits, un entier court (short) sur 16 bits et un entier long sur 32 bits, le type long long est codé sur 64 bits.
Le fichier d'entête “cfloat” (ou “float.h”) défini l'étendue des nombres décimaux, “climits” (ou “limits.h”) - celle des entiers.
Les limites des valeurs numériques sont définies dans l'entête <limits>. Les valeurs modèles de limits fournissent des représentations numériques indépendantes du système pour les types de données du C++. Utilisez la fonction appropriée en fournissant le type de donnée en paramètre comme indiqué ci-dessous. Notez que les limites numériques peuvent aussi être surchargées pour les types définis par l'utilisateur.
Méthode ou constante | Retour | Description |
---|---|---|
is_specialized | bool | |
radix | int | base de l'exposant |
digits | int | nombre de bits utilisés dans la représentation |
digits10 | int | nombre de chiffres qui peuvent être représentés |
is_signed | bool | nombre signé ? |
is_integer | bool | nombre entier ? |
is_exact | bool | |
min() | <type> | plus petit nombre représentable (non négatif) |
max() | <type> | plus grand nombre |
epsilon() | <type> | différence entre 1 et la plus petite valeur plus grande que 1 |
round_error() | <type> | erreur maximum d'arrondi |
infinity() | <type> | infini |
quiet_NaN() | <type> | nombre invalide ne signalant pas d'erreur |
signaling_NaN() | <type> | nombre invalide signalant une erreur |
denorm_min() | <type> | |
min_exponent | int | |
min_exponent10 | int | |
max_exponent | int | |
max_exponent10 | int | |
has_infinity | bool | |
has_quiet_NaN | bool | |
has_signaling_NaN | bool | |
has_denorm | <type>_denorm_style | |
has_denorm_loss | bool | |
is_iec559 | bool | conforme à l'IEC-559 |
is_bounded | bool | |
is_modulo | bool | |
traps | bool | |
tinyness_before | bool | |
round_style | float_round_style { round_to_nearest, … } |
L'utilisation la plus commune est la vérification des limites, pour être sûr qu'un nombre donnée est valide et peut être stocké. Le code suivant affiche les valeurs minimal et maximal d'un entier court sur le système courant.
#include <limits> std::cout << "Maximum : " << std::numeric_limits<short>::max() << std::endl; std::cout << "Minimum : " << std::numeric_limits<short>::min() << std::endl;
Les déclarations simple sont faciles à comprendre:
int i
Mais parfois cela peut devenir plus compliqué:
double **d[8] // hmm... char *(*(**foo [][8])())[] // argh! qu'est foo ?
Pour comprendre ces déclarations, suivez les trois règles :
d
ou foo
dans les exemples ci-dessus)double
ou char
)Par exemple:
Expression | Signifie |
---|---|
double **d[8]; | |
| d est … double |
| d est un tableau de 8 … double |
| d est un tableau de 8 pointeurs vers … double |
| d est un tableau de 8 pointeurs vers un pointeur de double |
Un autre exemple:
Expression | Signifie |
---|---|
char *(*(**foo [][8])())[] | |
| foo est … char |
| foo est un tableau de … char |
| foo est un tableau de tableaux de 8 … char |
| foo est un tableau de tableaux de 8 pointeurs vers … char |
| foo est un tableau de tableaux de 8 pointeurs vers un pointeur de … char |
| foo est un tableau de tableaux de 8 pointeurs vers un pointeur de fonction retournant … char |
| foo est un tableau de tableaux de 8 pointeurs vers un pointeur de fonction retournant un pointeur de … char |
| foo est un tableau de tableaux de 8 pointeurs vers un pointeur de fonction retournant un pointeur de tableau de … char |
| foo est un tableau de tableaux de 8 pointeurs vers un pointeur de fonction retournant un pointeur de tableau de pointeurs de char |
Pour une explication plus détaillée en anglais, voyez la description de comment lire les déclarations en C de Steve Friedl à http://www.unixwiz.net/techtips/reading-cdecl.html.