Was ist die richtige Art und Weise zu initialisieren, statische Daten Mitglieder C++ (98, 11 und 14)
Was ist die richtige Art und Weise zu initialisieren static
Mitglieder-Daten in C++? Ich bin auch daran interessiert, wie es sich verändert hat von C++98, C++11, C++14.
Hier ist ein Beispiel:
//bufferedOutput.h
class BufferedOutput
{
//Static member declaration.
static long bytecount;
};
//bufferedOutput.cpp
long BufferedOutput::bytecount = 50;
Gibt es andere Möglichkeiten zu initialisieren static
Daten Mitglieder?
- Dies könnte helfen: stackoverflow.com/a/26429556/1147772
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Regeln wurden immer wie folgt:
Einen
const
statische Daten-member (SDM) von integralen oder Aufzählungstyp kann initialisiert werden in der Klasse mit einem Konstanten Ausdruck.Einen
constexpr
SDM muss initialisiert werden in der Klasse mit einem Konstanten Ausdruck.C++17 nicht mehr erfordert eine Initialisierung, wenn der default-Konstruktor initialisiert jedes Mitglied. Auch
constexpr
SDMs sind implizit inline-Variablen, die Ihre Erklärung eine definition (externe Definitionen sind jetzt veraltet).inline
).Nichts wesentlich geändert zwischen C++03 und C++11+ für code, der gültig ist, in beiden Sprachen.
Beachten Sie, dass für die SMDs, die sind nicht inline, die in-class-Deklaration ist keine definition—unabhängig davon, ob eine Initialisierung zur Verfügung gestellt wird—und diese müssen definiert werden, wenn Sie odr-used.
Als C++17 wir können Ihre SDM-inline lässt die in-class-Deklaration eine definition:
50L
sonst bist du in der Zuweisung einer Ganzzahl zu lange.int
darstellen kann.