2012-06-22 15 views

risposta

17

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
Problemi correlati