Heim >Backend-Entwicklung >C++ >Warum verursacht die Übergabe eines statischen Const Int als Referenz einen Fehler „Undefinierte Referenz' in C?

Warum verursacht die Übergabe eines statischen Const Int als Referenz einen Fehler „Undefinierte Referenz' in C?

Linda Hamilton
Linda HamiltonOriginal
2024-10-29 19:02:02755Durchsuche

Why Does Passing a Static Const Int by Reference Cause an

Undefinierter Verweis auf Static Const Int: A Resolution

In einem aktuellen Programmierszenario ist ein Kompilierungsfehler mit der Meldung „Undefinierter Verweis auf“ aufgetreten 'Bar::kConst'". Der Fehler entstand durch den folgenden Codeausschnitt:

class Bar
{
public:
   static const int kConst = 1;
   void func()
   {
      foo(kConst);           // Error-prone line
   }
};

Der Fehler trat auf, weil das statische konstante Mitglied „kConst“ nicht definiert wurde. Normalerweise wird vom Compiler erwartet, dass er die erforderliche Ersetzung zur Kompilierungszeit vornimmt. In diesem Fall benötigt die Funktion „foo“ jedoch einen „const int &“-Parameter, was dazu führt, dass der Compiler eine Referenz gegenüber einer Substitution bevorzugt.

Um das Problem zu beheben, kann die folgende Modifikation angewendet werden:

foo(static_cast<int>(kConst));

Dieser Ansatz zwingt den Compiler dazu, ein temporäres „int“ zu erstellen und einen Verweis darauf zu übergeben, was eine erfolgreiche Kompilierung ermöglicht.

Das beobachtete Verhalten ist beabsichtigt, wie im C-Standard angegeben ( 9.4.2/4), die besagt, dass ein statisches Datenelement vom Typ „Konstante Ganzzahl“ mit einem Konstanteninitialisierer in ganzzahligen Konstantenausdrücken erscheinen kann. Es muss jedoch weiterhin im Namespace-Bereich definiert werden, wenn es im Programm verwendet wird.

Im angegebenen Code stellt die Übergabe des statischen Datenelements als konstante Referenz eine „Verwendung“ gemäß C-Standard (3.2/2) dar. Dies bedeutet, dass der Compiler verpflichtet ist, das Vorhandensein einer Definition für „kConst“ zu erzwingen.

Während GCC diese Anforderung in bestimmten Szenarien manchmal übersieht, ist es im Allgemeinen ratsam, sich an den Standard zu halten und auf die Verwendung von Referenzen zu verzichten Adressen von nicht existierenden Objekten abrufen oder abrufen.

Das obige ist der detaillierte Inhalt vonWarum verursacht die Übergabe eines statischen Const Int als Referenz einen Fehler „Undefinierte Referenz' 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