Entrambe le lingue garantiscono che le varianti firmate e non firmate di un tipo intero standard corrispondente abbiano la stessa dimensione.
C++, comitato progetti n3337, 3.9.1/3:
3 per ciascuno dei tipi interi standard di firma, esiste una corrispondente (ma differente) Standard non- tipo intero con segno: “unsigned char "," unsigned short int "," unsigned int "," unsigned long int ", e" unsigned long long int ", ognuno dei quali occupa la stessa quantità di memoria e ha gli stessi requisiti di allineamento (3.11) come numero intero con segno corrispondente 45; cioè, ogni intero intero con segno di tipo ha la stessa rappresentazione dell'oggetto del corrispondente tipo di intero senza segno. [...]
Per C, il testo è molto simile
Tratto da progetti di n1570, 6.2.5/6:
Per ciascuno dei tipi interi firmati, non v'è un corrispondente (ma diverso) tipo intero senza segno (designato con la parola chiave non firmata) che utilizza la stessa quantità di memoria (comprese le informazioni sul segno) e ha gli stessi requisiti di allineamento. Il tipo _Bool e i tipi di numeri interi senza segno che corrispondono al numero intero con segno standard sono i tipi di numeri interi senza segno standard. I tipi di interi senza segno che corrispondono ai tipi di intero con segno esteso sono i tipi di interi senza segno esteso. I tipi interi senza segno standard e esteso sono chiamati collettivamente numeri interi senza segno .
Anche se è ridondante, penso che sia consigliabile usare 'sizeof (unsigned int)' se si tratta di spazio per 'unsigned int' per evitare confusione. – zch
In termini di psicologia: vuoi la dimensione di X (qualunque sia la X) - Quindi, sii esplicito.Quindi programmando avrai sempre ragione qualunque sia X - (unsigned int, class Cabbage ...) –
Sarei stupito se sizeof (int) non fosse uguale a sizeof (unsigned). Raccomando fiducia-ma-verifica. – matthudson