Heim > Backend-Entwicklung > C++ > Warum erfordern statische Const-Integer-Mitglieder separate Definitionen in C?

Warum erfordern statische Const-Integer-Mitglieder separate Definitionen in C?

Susan Sarandon
Freigeben: 2024-12-10 07:12:10
Original
791 Leute haben es durchsucht

Why Do Static Const Integer Members Require Separate Definitions in C  ?

Statische Const-Integer-Mitglieder in der Klassendefinition definieren

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'
}
Nach dem Login kopieren

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.

Problemumgehung

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;
};
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage