Heim > Artikel > Backend-Entwicklung > Warum verursacht die Übergabe einer statischen Const-Ganzzahl per Const-Referenz an eine Vorlagenfunktion einen Fehler „Undefinierte Referenz“?
Undefinierter Verweis auf Static Const Int: Das Verhalten des Compilers verstehen
Stellen Sie sich ein Szenario vor, in dem Sie eine Vorlagenfunktion foo definieren, die einen Verweis auf akzeptiert eine Konstante vom Typ T. Innerhalb einer Klasse Bar deklarieren Sie eine statische konstante Ganzzahl kConst. Wenn foo mit kConst als Argument aufgerufen wird, meldet der Compiler möglicherweise den Fehler „Undefinierter Verweis auf ‚Bar::kConst‘“.
Dieser Fehler tritt auf, weil statische Konstanten-Ganzzahlen, während sie zur Kompilierungszeit initialisiert werden, immer noch erforderlich sind eine Definition im Programm, wenn sie auf bestimmte Weise verwendet wird. Gemäß dem C-Standard (9.4.2/4) kann ein statisches Datenelement „const“ in seiner Klassendefinition initialisiert werden, wenn es sich um einen ganzzahligen Konstantenausdruck handelt. Die Deklaration allein reicht jedoch nicht für die Verwendung in Konstantenreferenzen oder ganzzahligen Konstantenausdrücken aus.
Wenn Sie kConst per Konstantenreferenz an foo übergeben, „verwenden“ Sie es effektiv gemäß dem Standard (3.2/2). . Da GCC das statische Datenelement als „verwendet“ betrachtet, verlangt es seine Implementierung im Programmbereich. Es ermöglicht jedoch Nachsicht bei der Wertübergabe, bei der die L-Wert-R-Wert-Konvertierung sofort erfolgt.
Darüber hinaus wird generell davon abgeraten, eine Adresse von nicht vorhandenen Objekten zu übernehmen oder auf diese zu verweisen. Statische Datenelemente befinden sich an eindeutigen Speicherorten, und die Weitergabe ihrer Adressen von mehreren Übersetzungseinheiten kann zu undefiniertem Verhalten führen, es sei denn, das Objekt ist explizit in einer TU definiert.
Zusammenfassend lässt sich sagen, dass der Compilerfehler aufgrund der Anforderung entsteht eine Definition statischer konstanter Ganzzahlen, wenn sie per Konstantenreferenz übergeben oder in konstanten Ausdrücken verwendet werden. Es ist unbedingt erforderlich, die Richtlinien des Standards einzuhalten, um solche Fehler zu vermeiden.
Das obige ist der detaillierte Inhalt vonWarum verursacht die Übergabe einer statischen Const-Ganzzahl per Const-Referenz an eine Vorlagenfunktion einen Fehler „Undefinierte Referenz“?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!