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é?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top