confusione oggetto temporaneo
Domanda
Date un'occhiata a questo frammento di codice
struct S{ int i; int j;};
int main()
{
assert(S().i == S().j) // is it guaranteed ?
}
Perché?
Soluzione
è garantito?
Si è garantito. I valori di S().i
e S().j
sarebbero 0
. ()
implica valore di inizializzazione. (che significa i
e j
sarebbero zero inizializzata perché S
è una classe senza un costruttore di default definito dall'utente)
Altri suggerimenti
Da C ++ standard ISO / IEC 14882: 2003 (E) il punto 3.6.2
oggetti con durata di conservazione statica (3.7.1) è pari a zero-inizializzato (8,5) prima di qualsiasi altra inizializzazione si svolge.
Quindi questo è valido in quanto entrambe le variabili sono zero inizializzata.
Tecnicamente, sì. Saranno inizializzati a 0 (almeno sotto un accumulo non-debug per la maggior parte dei compilatori. Compilatore di Visual Studio sarà variabili non inizializzate solito inizializzazione di un modello specifico in build di debug) .
Tuttavia, se si fosse seduti in una revisione del codice, non stupitevi se sgridato per non inizializzare esplicitamente le variabili.