Ich weiß, dass Sie in der Regel eine statische Membervariable aus einer CPP-Datei initialisieren. Aber meine Frage ist: warum hast du zu?Warum _have_ Sie eine statische C++ - Membervariable initialisieren?
Hier ist ein Beispiel:
#include <vector>
using namespace std;
class A {
public:
static vector<int> x;
};
main() {
int sz = A::x.size();
}
Dieser einen Compiler-Fehler gibt: undefined reference to 'A::x'
Doch diese:
#include <vector>
using namespace std;
class A {
public:
static vector<int> x;
};
// Initialize static member
vector<int> A::x;
main() {
int sz = A::x.size();
}
kompiliert und läuft gut.
Ich kann verstehen, wenn ich den Vektor mit etwas anderem als dem Standardkonstruktor initialisiert habe, aber ich bin nicht. Ich möchte nur einen Vektor der Größe 0 erstellt. Sicherlich müssen alle statischen Member bei der Programminitialisierung Speicher zugewiesen werden. Warum verwendet der Compiler nicht einfach den Standardkonstruktor?
+1 aber Sie sollten einen der Dups löschen. Bei Objekten macht RAII die Initialisierung (auch wenn nur der Standardkonstruktor) eine Konsequenz der Definition. Funktioniert das für rohe Zeiger, eingebaute Typen wie 'int'? –
Ich meinte, dass Sie die Initialisierung dort hinzufügen können, wenn Sie möchten. Ich füge die Genauigkeit hinzu. – Klaim
@Steve POD Typ Konstruktoren sind nur syntaktisch, also ja es funktioniert, aber es tut eigentlich nichts (oder um noch genauer zu sein, es ist nichts zu tun - nach dem C++ - Standard). –