Es meklēju detalizētu informāciju par C++ pamattipu lielumu. Es zinu, ka tas ir atkarīgs no arhitektūras (16 bitu, 32 bitu, 64 bitu) un kompilatora.
Bet vai ir kādi C++ standarti?
Es izmantoju Visual Studio 2008 ar 32 bitu arhitektūru. Lūk, ko es saņemu:
char : 1 byte
short : 2 bytes
int : 4 bytes
long : 4 bytes
float : 4 bytes
double: 8 bytes
Es mēģināju atrast uzticamu informāciju par char
, short
, int
, long
, double
, float
(un citiem tipiem, par kuriem es neiedomājos) izmēriem dažādās arhitektūrās un kompilatoros, bet bez īpašiem panākumiem.
Praksē tā nav. Bieži vien var sagaidīt, ka std::size_t
ataino neparakstītu veselu skaitļu izmēru pašreizējā arhitektūrā, t.i., 16 bitu, 32 bitu vai 64 bitu, bet ne vienmēr tas tā ir, kā norādīts šīs atbildes komentāros.
Attiecībā uz visiem pārējiem iebūvētajiem tipiem tas ir atkarīgs no kompilatora. Lūk, divi izvilkumi no jaunākā C++ standarta pašreizējā darba projekta:
Ir pieci standarta parakstītu veselu skaitļu tipi: parakstīts char, short int, int, long int un long long long int. Šajā sarakstā katrs tips nodrošina vismaz tikpat lielu atmiņas apjomu kā tie tipi, kas sarakstā ir pirms tā.
Katram standarta parakstīto veselu skaitļu tipam ir atbilstošs (bet atšķirīgs) standarta neparādīto veselu skaitļu tips: unsigned char, unsigned short int, unsigned int, unsigned long int un unsigned long long int, no kuriem katrs aizņem tikpat daudz vietas un tiem ir tādas pašas izlīdzināšanas prasības.
Ja vēlaties, varat statiski (kompilēšanas laikā) apgalvot šo pamattipu lielumu. Tas brīdinās cilvēkus, lai padomā par jūsu koda pārnešanu, ja mainās sizeof pieņēmumi.
Kā minēts, izmēram jāatspoguļo pašreizējā arhitektūra. Ja vēlaties noskaidrot, kā jūsu pašreizējais kompilators rīkojas ar šīm lietām, varat ielūkoties limits.h
.
Kā jau minējāt - tas lielā mērā ir atkarīgs no kompilatora un platformas. Šajā jautājumā skatiet ANSI standartu, http://home.att.net/~jackklein/c/inttypes.html.
Šeit ir Microsoft kompilatora standarts: Datu tipu diapazoni.