2016-10-12 5 views
3

Betrachten Sie den folgenden Code ein:Wird die C++ - Standardinitialisierung Array-Elemente auf ihren Standardwert setzen?

#include <iostream> 

using namespace std; 

int main(){ 
    int* p = new int[2]; 
    for (int i = 0; i < 2; i++) 
    cout << p[i] << endl; 
    return 0; 
} 

Ich betreibe es mehrmals. Es erzeugt immer die folgende Ausgabe:

Kann ich davon ausgehen, dass die C++ - Standardinitialisierung Array-Elemente auf ihren Standardwert setzt? Kann ich in diesem Fall annehmen, dass die Elementwerte von p immer auf 0 gesetzt sind?

Ich habe die folgenden verwandten Fragen gelesen. Aber sie nicht ausdrücklich meinem Fall Adresse:

Antwort

6

Kann ich davon ausgehen, dass C++ Standard-Initialisierung Satz Array-Elemente auf den Standardwert?

Nein, für default initialization:

  • wenn T ein Array-Typ ist, jedes Element des Arrays ist default-initialisiert;

und der Elementtyp ist int, dann

  • sonst nichts getan wird: die Objekte mit automatischer Speicherdauer (und deren Subobjekte) auf unbestimmte Werte initialisiert.

Auf der anderen Seite, list initialization (da C++ 11) wie int* p = new int[2]{}; oder int* p = new int[2]{0}; oder value initialization wie int* p = new int[2](); wird garantieren, dass, für int alle Elemente Null initialisiert werden.

Verwandte Themen