Ich würde gerne wissen, ob es einen Unterschied zwischen diesem Code ist:C++ Initialisierung Felder direkt vs Initialisierung Liste in Standardkonstruktors
class Foo{
private:
int a = 0;
public:
Foo(){}
}
Und:
class Foo{
private:
int a;
public:
Foo(): a(0) {}
}
Und wenn ja, welche sollte bevorzugt werden? Ich weiß, dass es vorzuziehen ist, eine Initialisierungsliste als die Zuweisung im Konstruktor-Body zu verwenden, aber was ist mit Initialisierungsliste vs direkt Initialisierung in Feld Deklaration (für primitive Typen, zumindest, wie es hier der Fall ist)?
Auch, was der Fall unter:
class Foo{
private:
int a = 0;
public:
Foo(){}
Foo(int i): a(i) {}
}
Wenn die Nicht-Standard-Konstruktor aufgerufen wird: „a“ zweimal initialisiert, zuerst auf 0 dann auf „i“ oder direkt auf „i“ ?
Sie sind gleichwertig. Feldinitialisierung ist jedoch besser lesbar, IMO. Es ist viel einfacher zu sehen, * was * der Standardwert * ist * von der Klassendefinition. – StoryTeller
... aber andererseits würde das Ändern des Standardwerts eine Neukompilierung von allem, was den Header enthält, verursachen. Kenne sie beide und wähle diejenige, die besser zu deinem Fall passt. – Quentin
Laut Olaf Dietsches Antwort - Sie haben einen Fall verpasst; wobei sowohl a = 0 als auch foo: a (0) verwendet werden – UKMonkey