Ho una struttura con un campo unsigned char[16]
che vorrei inizializzare su zeri. Il seguente codice (fortemente semplificato) compila bene con clangore (OS X):Come inizializzare un array di caratteri non firmato da una stringa letterale?
struct GUID {
unsigned char bytes[16];
GUID() : bytes("\0\0\0\0""\0\0\0\0""\0\0\0\0""\0\0\0") {};
}
Nota io uso 15 \0
s perché il 16 è il terminatore zero della stringa letterale, e clang lamenta se si inizializza una stringa con troppi byte.
Ora, quando provo a compilare con GCC 4.5.3 (cygwin), ottengo:
error: incompatible types in assignment of 'const char [16]' to 'unsigned char [16]'
Perché non funziona, e come posso farlo funzionare? (Potrei ovviamente passare attraverso l'array nel costruttore, ma mi piacerebbe usare l'elenco di inizializzazione, se possibile, e mi piacerebbe capire perché funziona in un compilatore, ma non l'altro.)
Giusto, questa è probabilmente la soluzione più pulita e ciò che farò. – jdm
No, per il tuo caso particolare, la soluzione migliore è quella di DeadMG. –
@Haroogan: La matrice è garantita per essere riempita di zeri se faccio byte()? – jdm