Ich habe mehrere Beiträge auf C++ Initialisierung von Google gelesen, von denen einige mich hier auf StackOverflow leiten. Die Konzepte I aus diesen Pfosten aufgenommen sind, wie folgt:Null Initialisierung und statische Initialisierung des lokalen Bereichs statische Variable
- Die Reihenfolge der Initialisierung von C++ ist:
- Null Initialization;
- Statische Initialisierung;
- Dynamische Initialisierung.
- Statische Objekte (Variablen enthalten) sind erste Null initialisierten und dann Static-initialisierten.
Ich habe mehrere Anfragen in Bezug auf die Initialisierung Ausgabe (Speicherklasse Problem kann auch in Beziehung gesetzt werden):
- Globale Objekte (definiert ohne statische Schlüsselwort) sind auch statische Objekte, oder?
- Globale Objekte sind auch initialisiert wie statische Objekte durch zwei Schritte wie oben, oder?
- Was ist die Statische Initialisierung? Bezieht es sich auf die Initialisierung statischer Objekte (definiert mit statisch Schlüsselwort)?
- Ich lese auch, dass Objekte innerhalb Block definiert (d. H. In einer Funktion) mit statische Schlüsselwort wird initialisiert, wenn der Ausführungs-Thread zuerst den Block betritt! Das bedeutet, dass lokale statische Objekte nicht initialisiert werden, bevor Haupt Funktionsausführung. Dies bedeutet, dass sie nicht als die beiden oben genannten Schritte initialisiert werden, oder?
- Dynamische Initialisierung bezieht sich auf die Initialisierung von Objekten erstellt von neue Operator, richtig? Es könnte beziehen sich auf die Initialisierung wie
myClass obj = myClass(100);
odermyClass obj = foo();
Ich habe zu viele Anfragen auf der Initialisierung und Speicherklassen-Bezeichner Fragen. Ich lese das C++ 2003 Standard Dokument, kann aber keine klare Logik finden, da sie im gesamten Dokument verstreut sind.
Ich hoffe, Sie geben mir eine Antwort, die logisch erklärt die gesamte Karte der Speicherklasse Spezifizierer und Initialisierung. Jede Referenz ist willkommen!
Code, der meine Frage erklären könnte:
class myClass{
public:
int i;
myClass(int j = 10): j(i){}
// other declarations
};
myClass obj1;//global scope
static myClass obj2(2);//file scope
{ //local scope
myClass obj3(3);
static myClass obj4(4);
}
EDIT:
Wenn Sie meine Frage denken, ziemlich langweilig ist, können Sie Ihre Ideen helfen zu erklären, oben basierend auf dem Code.
Dieser Beitrag könnte nützlich sein: http://bytes.com/topic/c/answers/860211-global-variable-static-global-variable –