2009-05-18 11 views
6

Podczas czytania odpowiedzi na to question mam wątpliwości dotyczące domyślnej konstrukcji obiektów w wektorze. Aby przetestować go napisałem następujący kod testowy:Domyślna konstrukcja elementów w wektorze

struct Test 
{ 
    int m_n; 

    Test(); 

    Test(const Test& t); 

    Test& operator=(const Test& t); 
}; 

Test::Test() : m_n(0) 
{ 
} 

Test::Test(const Test& t) 
{ 
    m_n = t.m_n; 
} 

Test& Test::operator =(const Test& t) 
{ 
    m_n = t.m_n; 
    return *this; 
} 


int main(int argc,char *argv[]) 
{ 
    std::vector<Test> a(10); 
    for(int i = 0; i < a.size(); ++i) 
    { 
     cout<<a[i].m_n<<"\n"; 
    } 

    return 0; 
} 

I rzeczywiście, kodowanym testowe domyślny konstruktor jest wywoływana podczas tworzenia obiektów wektorowych. Ale czego nie jestem w stanie zrozumieć, to w jaki sposób STL inicjalizuje obiekty I tworzy wektor podstawowego typu danych, takiego jak wektor ints, ponieważ istnieje dla niego domyślny konstruktor? tj. jak wszystkie ints w wektorze mają wartość 0? czy to nie powinno być śmieciem?

Odpowiedz

10

Używa odpowiednika domyślnego konstruktora dla ints, który zeruje je. Możesz to zrobić jawnie:

int n = int(); 

ustawi n na zero.

Należy zauważyć, że domyślna konstrukcja jest używana i wymagana tylko w przypadku, gdy wektor ma rozmiar początkowy. Jeśli powiedziałeś:

vector <X> v; 

nie ma wymogu, aby X miał domyślny konstruktor.

+0

Wydaje się mieć dużo czasu na rękach, dzisiaj :) – xtofl

+0

To radość recesji :-( –

+0

nie wiedziałem, że .. Więc co my znowu zadzwonić int() As? To dlaczego nie mamy domyślne inicjalizatory dla podstawowych typów danych – Canopus

1
std::vector<Type> a(10);  // T could be userdefined or basic data type 

Wektor zasadzie nazywa default do rodzaju, do którego punkty: Type()

  • jeśli jest to podstawowy typ danych jak int, podwójne są tam wówczas int(), podwójny() {int () otrzyma wartość 0}
  • , jeśli zdefiniowany przez użytkownika typ danych, wówczas zostanie wywołany domyślny konstruktor: .
Powiązane problemy