Questo è noto come valore di inizializzazione. Dallo standard C++ 03, §8.5/7:
Un oggetto le cui inizializzatore è un insieme vuoto di parentesi, cioè(), deve essere il valore-inizializzato.
E da §8.5/5:
Per valore-inizializzare un oggetto di tipo T
significa:
- se
T
è un tipo di classe con un costruttore dall'utente dichiarato , viene chiamato il costruttore predefinito per T
(e l'inizializzazione è mal formata se non ha un costruttore predefinito accessibile);
- se
T
è un tipo di classe non di unione senza un costruttore dichiarato dall'utente, quindi ogni membro di dati non statici e componente di classe base di T
è inizializzato a valore;
- se
T
è un tipo di matrice, quindi ciascun elemento viene inizializzato in base al valore;
- altrimenti, l'oggetto è zero inizializzata
Per zero inizializzare un oggetto di tipo T
significa:
- se
T
è un tipo scalare, l'oggetto viene impostato al valore di 0
(zero) convertito in T
;
- se
T
è un tipo di classe non di unione, ogni membro di dati non statici e ogni sottoprogetto di classe base è inizializzato a zero;
- se
T
è un tipo di unione, il primo membro dati denominato dell'oggetto) è inizializzato a zero;
- se
T
è un tipo di matrice, ogni elemento è inizializzato a zero;
- se
T
è un tipo di riferimento, non viene eseguita alcuna inizializzazione.
Quindi nel tuo caso, dipende dalla definizione di SpiHandleT
:
- Se si tratta di uno scalare, sarà pari a zero-inizializzato
- Se si tratta di un tipo di classe senza un costruttore dichiarato dall'utente, i suoi sottooggetti saranno (ricorsivamente) inizializzati dal valore
- Se è un tipo di classe con un costruttore dichiarato dall'utente , sarà costruito in modo predefinito