Frage von JamesOffice, 40

Static und Const Attribute initialiesieren?

Guten Abend, Soweit ich weiß müssen Const-Attribute in der Initialiesierungsliste initialisiert werden sonst meldet der Compiler einen Fehler. gilt das auch für Static Attribute? Wenn ja warum meldet der C++ Compiler "bei global --> Siehe Code unten" KEIN Fehler? Danke im Voraus :)

class NixIs {

const int id;

int var;

static int global;

public:

NixIs(int val = 0) : id(0)

{

global = val;

}

Antwort
von OGGY16, 24

const und static sind zwei verschiedene sachen. 

const ist wie der name schon sagt, konstant, wird also einmal initialisiert und darf nie mehr verändert werden.

static heisst, die variable gibt es nur einmal für alle instanzen der klasse. also wenn du zwei objekte von NixIs erstellst, und dann innerhalb von nixIsA den wert von global veränderst, dann wird der wert auch innerhalb von nixIsB verändert. Beide Objekte lesen den Wert aus der gleichen Speicheradresse, da du sie als static deklariert hast.

Kommentar von JamesOffice ,

Das ist mir ganz klar! Aber was mich echt stört ist genau der Satz:
"Konstruktoren sind für die Initialisierung von "nicht static" Attributen zuständig". Wenn ich das richtig verstanden habe, sollte der Compiler in dem obigen Code einen Fehler melden, da wir das "global" in dem KONSTROKTUR initialisieren oder? Herzlichen Dank!

Kommentar von OGGY16 ,

vielleicht stellst du deine frage mal auf stackoverflow.com :)

Antwort
von RakonDark, 10

nein das ist sogar normal , wenn die const einen bezug zur klasse hat, sollte man sie auch in der klasse definieren . wie du die const dann abhandelst ist dein ding , bezogen auf drinne oder draussen .

es sollte also keinen fehler produzieren , da es keine vorschrift gibt wo eine const zu stehen hat .


Kommentar von RakonDark ,

ausserdem hast du sie dann im namespace der classe und nicht im global space, was wiederum eine collision mit anderen in headern gesetzen gleichnamigen variablen probleme ergibt .

Keine passende Antwort gefunden?

Fragen Sie die Community