La regola che si sta cercando è 3.9p4:
La rappresentazione oggetto di un oggetto di tipo T
è la sequenza di N
unsigned char
oggetti presi dalla oggetto di tipo T
, dove N
uguale sizeof(T)
. La rappresentazione del valore di un oggetto è l'insieme di bit che contiene il valore di tipo T
. Per i tipi banalmente copiabili, la rappresentazione del valore è un insieme di bit nella rappresentazione dell'oggetto che determina un valore, che è un elemento discreto di un insieme di valori definito dall'implementazione.
Quindi, se si utilizza unsigned char
, è possibile prendere un comportamento definito dall'implementazione (qualsiasi implementazione conforme deve dare una garanzia su ciò che il comportamento è).
La lettura tramite char
è legale, ma i valori non sono specificati. Tuttavia, si garantisce che l'utilizzo di un valore non qualificato char
conserverà il valore (pertanto il valore di char
non può avere rappresentazioni di trap o bit di riempimento), in base a 3.9p2:
Per qualsiasi oggetto (diverso da un sotto-oggetto classe base) di tipo banalmente copiabile T, se l'oggetto contiene un valore valido di tipo T
, i byte sottostanti (1.7) che costituiscono l'oggetto può essere copiati in un array di char
o unsigned char
. Se il contenuto dell'array di char
o unsigned char
viene ricopiato nell'oggetto, l'oggetto deve successivamente conservare il suo valore originale.
(valori "non specificato" sono un po 'più debole di valori "di implementazione definiti" - la semantica sono gli stessi, ma la piattaforma non è tenuto a documentare quali sono i valori.)
fonte
2015-03-20 18:29:02
è http://stackoverflow.com/q/12612488/560648 non è sufficiente? –
Leggi [basic.types]/p2. 'c' manterrà la rappresentazione dell'oggetto di' i', il cui valore è determinato dall'ordine dei byte di sistema. Il valore di 'c [0]' è * indeterminante * ma il programma è ben formato. – 0x499602D2
@LightnessRacesinOrbit Scusa ma non capisco la rilevanza di tale domanda. –