Cheers e hth. - Alf ha fatto un commento in questo answer che l'inizializzazione del valore è probabilmente una nuova funzionalità di C++ 03 rispetto a C++ 98. Mi chiedo cosa intendesse.Parte di inizializzazione del valore dello standard C++ 98? In caso negativo, perché è stato aggiunto nello standard C++ 03?
È value initialization parte di C++ 98? È presente nel concetto ma non nel nome? Perché è stato aggiunto allo standard C++ 03?
Ho una copia dello standard '03 ma non dello standard '98. Ecco la definizione di inizializzazione e inizializzazione del valore predefinite.
Per default-inizializzare un oggetto di tipo T significa:
- se T è un non-POD tipo di classe (clausola 9), il costruttore di default per T è chiamato (e l'inizializzazione è malato -formato se T non ha il costruttore predefinito accessibile );
- se T è un tipo di matrice, ciascun elemento viene inizializzato di default;
- in caso contrario, l'oggetto viene inizializzato a zero.
Per valore-inizializzare un oggetto di tipo T significa:
- se T è un tipo di classe (clausola 9) con un costruttore dall'utente dichiarato (12.1), quindi il costruttore di default per T è chiamato (e l'inizializzazione è mal formata se T non ha un costruttore predefinito accessibile);
- se T è un non-unione classe tipo senza un costruttore dall'utente dichiarato, allora ogni componente di dati persona e della classe base non statica di T è il valore-inizializzato;
- se T è un tipo di matrice, quindi ogni elemento viene inizializzato in base al valore;
- in caso contrario, l'oggetto è pari a zero-inizializzato
mia ipotesi è che '98 avevano l'inizializzazione di default, ma non l'inizializzazione valore e che c'è qualche differenza fondamentale tra i due. Ad essere onesti, sto avendo problemi a analizzare lo standard qui e non capisco la differenza tra le definizioni.
Hai capito. Propongo di portare alcune delle motivazioni della DR nella tua risposta per renderla autosufficiente. Fammi sapere quando l'hai fatto in modo da poterti invogliare. :) –
La cosa fastidiosa della versione C++ 98 è che se si ha una classe contenente una 'std :: string' e alcune variabili' int', non c'è modo di ottenerla a zero - inizializza gli inte diversi da elencarli esplicitamente tutti nell'elenco di inizializzazione del costruttore. –
@MattMcNabb Non l'ho seguito. Li elenco tutti nella lista di inizializzatori invece di fare cosa? Se non li si elenca nell'elenco di inizializzazione in C++ 03, vengono inizializzati a zero? – Praxeolitic