Heim > Backend-Entwicklung > C++ > Warum können Sie in C kein Array von Referenzen deklarieren?

Warum können Sie in C kein Array von Referenzen deklarieren?

DDD
Freigeben: 2024-12-04 17:10:13
Original
264 Leute haben es durchsucht

Why Can't You Declare an Array of References in C  ?

Arrays von Referenzen in C: Erklärt mit Standardreferenz

Betrachten Sie den folgenden Code:

int a = 1, b = 2, c = 3;
int& arr[] = {a,b,c,8};
Nach dem Login kopieren

Dieser Code kompiliert nicht. Warum? Erkunden wir den C-Standard, um die Antwort zu finden.

C-Standard-Leitfaden

Gemäß dem C-Standard §8.3.2/4:

" Es dürfen keine Referenzen auf Referenzen, keine Referenzarrays und keine Zeiger darauf vorhanden sein Referenzen.“

Begründung hinter der Einschränkung

Diese Einschränkung besteht, weil Referenzen keine Objekte im herkömmlichen Sinne sind. Sie sind im Wesentlichen Aliase für Objekte und belegen keinen Speicher, daher haben sie keine Adressen. Folglich macht die Deklaration eines Arrays von Referenzen wenig Sinn, da es kein Array von Objekten gibt, auf das verwiesen werden kann.

Alternativer Ansatz

Wenn Sie ein Array von Referenzen simulieren müssen können Sie eine Klasse erstellen, die eine Referenz kapselt, wie im folgenden Beispiel gezeigt:

struct cintref
{
    cintref(const int & ref) : ref(ref) {}
    operator const int &() { return ref; }
private:
    const int & ref;
    void operator=(const cintref &);
};

int main() 
{
  int a=1,b=2,c=3;
  cintref arr[] = {a,b,c,8};
}
Nach dem Login kopieren

Dieser Ansatz simuliert im Wesentlichen ein Array von Referenzen durch Erstellen eines Arrays von Objekten der Klasse cintref. Jedes Objekt enthält einen Verweis auf die entsprechende Ganzzahlvariable.

Das obige ist der detaillierte Inhalt vonWarum können Sie in C kein Array von Referenzen deklarieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage