Ho il seguente codice:Due modi di chiamare predefinita costruttore
struct B
{
//B() {}
int x;
int y;
};
void print(const B &b)
{
std::cout<<"x:"<<b.x<<std::endl;
std::cout<<"y:"<<b.y<<std::endl;
std::cout<<"--------"<<std::endl;
}
int main()
{
B b1 = B(); //init1
B b2; //init2
print(b1);
print(b2);
return 0;
}
Quando inizio programma (VS2008, debug) ho il seguente output:
x:0
y:0
--------
x:-858993460
y:-858993460
--------
Come si può vedere b1. x e b1.y hanno valore 0. perché? Qual è la differenza tra init1 e init2?
Quando ho Decommentare B costruttore ho il seguente output:
x:-858993460
y:-858993460
--------
x:-858993460
y:-858993460
--------
Qualcuno può spiegare il motivo di questo comportamento? Tnx in anticipo.
Come spiega i diversi risultati per 'b1' e' b2'? – sth
E l'ultimo caso per "inizializzazione predefinita" dovrebbe essere "altrimenti, non viene eseguita alcuna inizializzazione". Questa è la differenza cruciale qui. – sth
@sth: No, l'inizializzazione predefinita deve inizializzare a zero altri oggetti, il punto cruciale è che i tipi POD con durata di archiviazione automatica senza un inizializzatore esplicito non sono nemmeno inizializzati di default. –