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
Susan SarandonOriginal
2024-12-10 07:12:10817Durchsuche

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'
}

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;
};

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!

Stellungnahme:
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