Heim >Backend-Entwicklung >C++ >Warum erhalte ich die Fehlermeldung „Undefinierte Referenz', wenn ich statische Konstantenreferenzen an Funktionen übergebe?

Warum erhalte ich die Fehlermeldung „Undefinierte Referenz', wenn ich statische Konstantenreferenzen an Funktionen übergebe?

Barbara Streisand
Barbara StreisandOriginal
2024-10-30 18:46:03650Durchsuche

Why do I get

Undefinierte Referenzen mit statischen Konstantenreferenzen

Beim Implementieren einer Funktion mit einer Referenz auf eine statische Konstante, wie z. B. const int & a, der Compiler kann auf den Fehler „Undefinierte Referenz“ stoßen. Dieser Fehler ist auf die Tatsache zurückzuführen, dass die Konstante zwar als statisch deklariert ist, aber nicht in dem Kontext definiert ist, in dem die Funktion aufgerufen wird.

Gemäß dem C-Standard (9.4.2/4) eine statische Konstante Datenmember eines const-Integraltyps können mit einem Konstanteninitialisierer in ihrer Deklaration initialisiert werden. Wenn es jedoch in einem Funktionsparameter verwendet wird, stellt die Übergabe als konstante Referenz eine „Verwendung“ dar (gemäß 3.2/2) und löst die Anforderung für seine Definition innerhalb des Namespace-Bereichs aus.

Im bereitgestellten Beispiel wird die Die statische Konstante kConst wird in der Funktion foo über die Zeile foo(kConst) verwendet. Da die Konstante nirgendwo definiert ist, versucht der Compiler, eine Referenz auf ein undefiniertes Objekt zu erstellen. Um dieses Problem zu lösen, muss der Entwickler entweder eine Definition für kConst bereitstellen oder die Konstante als Wert übergeben (wodurch eine temporäre Objekterstellung erzwungen wird), wie in der im Beispiel vorgeschlagenen Lösung gezeigt.

Während GCC möglicherweise die Übergabe der Konstante als Wert zulässt (über static_cast(kConst)) hält es sich strikt an den Standard, wenn es als Referenz übergeben wird. Dieser Fehler dient als Erinnerung daran, statische Konstanten zu definieren oder sie als Wert zu verwenden, wenn sie an Funktionen übergeben werden, die konstante Referenzen annehmen.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich die Fehlermeldung „Undefinierte Referenz', wenn ich statische Konstantenreferenzen an Funktionen übergebe?. 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