6

Ben Voigt ha sottolineato che here:In che modo l'inizializzazione dello zero, l'inizializzazione statica e l'inizializzazione del valore differiscono?

Zero inizializzazione è una delle fasi di inizializzazione statico. Ma hai ragione che non puoi sostituire ciecamente quest'ultimo (tag), poiché l'inizializzazione dello zero viene eseguita anche per l'inizializzazione del valore. Tuttavia, non è necessario (un tag denominato) inizializzazione zero nel contesto di C++, poiché i tag esistono già sia per l'inizializzazione statica che per l'inizializzazione del valore e quelli sono più pertinenti.

ho pensato che ci fosse un caso in cui aveva senso "Zero-Initialize" piuttosto che "Static-Initializing" o "Value-Initializing" o è "zero-inizializzazione" non accadrà mai in natura, e devo usare termini più specifici come: "static- Inizializzazione "o" Inizializzazione del valore "?

Per essere onesti, la maggior parte della mia esperienza su questi argomenti deriva dallo studio delle risposte allo this question, quindi sono sicuro che Ben Voigt ha ragione, vorrei solo che qualcuno spiegasse perché.

+0

Sembra che questa domanda sia più per meta.SO che SO come per i tag ... – Jarod42

+0

@ Jarod42 Beh, la domanda nella mia mente è uno dei concetti. Penso che mi manca quello che dice Ben Voigt perché non capisco la differenza tra queste inizializzazioni. Non sono sicuro di come possiamo entrare in quella tecnicità sulla meta. –

+0

@ Jarod Io non la penso così. È una meta domanda, dato che Jonathan non sta chiedendo del C++, ma della terminologia usata dallo Standard e degli esperti per parlare di C++. Ma SO è ancora il sito giusto, meta.SO è solo per il sottoinsieme di meta domande che riguardano il software e le politiche di Stack Overflow e questo non lo è. –

risposta

4

L'inizializzazione dello zero può verificarsi autonomamente; quando un array di caratteri viene inizializzato utilizzando un letterale stringa più breve dell'array, i caratteri rimanenti vengono inizializzati a zero. In tutti gli altri casi, l'inizializzazione zero si verifica durante l'inizializzazione del valore oppure come il passaggio di inizializzazione statica di inizializzazione di un oggetto con durata di archiviazione statica o thread-locale (questo può verificarsi da solo o essere propedeutico a dinamico inizializzazione).

Quindi, a meno che stai chiedendo circa le rappresentazioni a zero per i tipi di carattere (e non riesco a vedere che vi sia molte domande in questo argomento), uno dei si applicheranno o gli altri tag, e non riesco a vedere molto valore nell'utilizzare la quota del tag per applicare anche .

+0

Zero-Initialization is just, inizializzazione di default quindi? –

+0

Non so perché abbiamo ancora questa regola, dal momento che il più generale "Se ci sono meno clausole di inizializzazione nella lista di quanti sono gli elementi nell'aggregato, allora ogni elemento non inizializzato esplicitamente deve essere inizializzato dal suo membro predefinito initializer (9.2) o, se non esiste un inizializzatore di membro predefinito, da un elenco di inizializzazione vuoto (8.5.4). " garantisce già lo stesso comportamento, come l'inizializzazione dei tipi di carattere da un elenco di inizializzazione vuoto è l'inizializzazione del valore è zero inizializzazione. –

+1

@JonathanMee: No, non è l'inizializzazione predefinita, che può chiamare un costruttore utente. Ci sono davvero due diverse categorie. Il primo è ciò che accade quando un oggetto viene creato da '{}' e il costruttore di default del tipo è banale a/k/a valore-inizializzazione (formalmente questo non accade per gli array di caratteri, ma non conosco alcuna differenza effettiva tra cosa succede lì e per tutti gli altri aggregati con più elementi rispetto agli inizializzatori). Questo caso non può mai sorgere se il tipo ha un costruttore predefinito definito dall'utente. –

Problemi correlati