Statische Datenelemente, wie die Variable „i“ im bereitgestellten Code, erfordern eine besondere Behandlung während der Initialisierung. Es ist wichtig, den Unterschied zwischen einem Initialisierer, der einen Wert zuweist, und einer Definition, die die Existenz der Variablen deklariert, zu verstehen.
Im Codebeispiel die statischen Daten Mitglied „i“ wird außerhalb der Klassendefinition initialisiert. Dies ist eine Anforderung, da eine Definition eine Adresse im Speicher für die Variable bereitstellen muss, die nicht innerhalb der Klassendefinition selbst bestimmt werden kann.
Andererseits weist ein Initialisierer der Variablen einfach einen Wert zu, ohne ihren Wert anzugeben Adresse. Dies ermöglicht eine übersichtliche Möglichkeit, einen Anfangswert an einer Stelle festzulegen, ohne ihn in Konstruktoren wiederholen zu müssen.
Nichtstatische Datenelemente wie „normalValue“. " sind im Beispiel innerhalb von Instanzen der Klasse vorhanden. Ihre Adressen hängen von der Instanz ab, zu der sie gehören. Daher werden beim Erstellen von Instanzen nicht statische Datenelementdefinitionen erstellt.
Statische Datenelemente haben dagegen eine feste Adresse und existieren unabhängig von jeder Instanz. Um sicherzustellen, dass sie eine eindeutige Adresse erhalten, benötigt der Linker genau eine Definition für jedes statische Datenelement. Da Klassendefinitionen normalerweise in mehreren Objektdateien enthalten sind, würde die Definition statischer Datenelemente innerhalb der Klasse gegen diese Anforderung verstoßen.
Um dieses Problem zu beheben, müssen statische Datenelementdefinitionen vorhanden sein außerhalb der Klassendeklaration platziert. Dadurch wird sichergestellt, dass sie in einer einzigen Objektdatei angezeigt werden, sodass der Linker eine korrekte Adresse zuweisen kann.
Das Konzept der Definition statischer Datenelemente außerhalb der Klasse ähnelt der Deklaration externe Variablen. Eine externe Deklaration gibt an, dass die Variable an anderer Stelle im Programm definiert ist. Ebenso können Deklarationen statischer Datenelemente in der Klassendefinition als externe Deklarationen angesehen werden, wobei die tatsächliche Definition separat bereitgestellt wird.
Das obige ist der detaillierte Inhalt vonWie und warum initialisieren wir statische Datenelemente außerhalb der Klassendefinition?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!