Entgegen der landläufigen Meinung reicht die Initialisierung eines statischen Const-Integrals in der Klassendefinition nicht aus, um die erforderliche Definition zu generieren durch anderen Code. Wie der vom bereitgestellten Code gemeldete Kompilierungsfehler zeigt, ist eine separate Definition immer noch obligatorisch:
#include <algorithm> #include <iostream> class test { public: static const int N = 10; }; int main() { std::cout << test::N << "\n"; std::min(9, test::N); // Error: Undefined reference to `test::N' }
Dieses Problem ist auf den Parametererfassungsmechanismus von std::min zurückzuführen: Er erfasst Werte anhand einer Konstantenreferenz. Wenn es einen Wert annehmen würde, wäre keine separate Definition erforderlich.
Obwohl das Definieren des statischen const-Mitglieds außerhalb der Klasse das Problem behebt, gibt es eine bessere Lösung: die Verwendung des Schlüsselworts constexpr. Dadurch entfällt die Notwendigkeit einer separaten Definition und es werden andere Randfälle behandelt.
class test { public: static constexpr int N = 10; };
Das obige ist der detaillierte Inhalt vonWarum erfordern statische Const-Integer-Mitglieder separate Definitionen in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!