Heim > Backend-Entwicklung > C++ > Warum sind Arrays von Referenzen in C verboten?

Warum sind Arrays von Referenzen in C verboten?

Patricia Arquette
Freigeben: 2024-12-05 14:21:10
Original
430 Leute haben es durchsucht

Why Are Arrays of References Prohibited in C  ?

Arrays von Referenzen und der C-Standard

In C ein Versuch, ein Array von Referenzen zu deklarieren, wie im folgenden Codeausschnitt: führt zu einem Kompilierungsfehler:

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

Dies ist ausdrücklich durch den C-Standard verboten, der Folgendes besagt: §8.3.2/4: „Es darf keine Verweise auf Verweise, keine Arrays von Verweisen und keine Zeiger auf Verweise geben.“

Warum sind Arrays von Verweisen illegal?

Der Grund für dieses Verbot liegt in der Natur der Referenzen. Im Gegensatz zu Objekten, die Speicher belegen und eine Adresse haben, sind Referenzen Aliase für andere Objekte. Sie haben keine unabhängige Existenz und belegen selbst keinen Speicher.

Ein Array von Referenzen wäre daher ein Array von Zeigern auf Objekte, was zu Verwirrung und möglichen Problemen bei der Speicherverwaltung führen könnte. Wenn beispielsweise das Objekt, auf das eine Referenz zeigt, gelöscht würde, würde die Referenz baumeln und das Array könnte ungültige Daten enthalten.

Arrays von Referenzen simulieren

Während das Erstellen echter Referenzarrays in C nicht zulässig ist, gibt es Möglichkeiten, ihr Verhalten mit anderen Techniken zu simulieren. Ein gängiger Ansatz besteht darin, eine Klasse zu verwenden, die eine Referenzmitgliedsvariable enthält, wie im folgenden Code 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

Dadurch können wir ein Array von Objekten erstellen, die jeweils einen Verweis auf eine Ganzzahlvariable enthalten. Es ist jedoch wichtig zu beachten, dass es sich hierbei nicht um ein echtes Array von Referenzen handelt, sondern vielmehr um ein Array von Objekten, die Referenzen speichern.

Das obige ist der detaillierte Inhalt vonWarum sind Arrays von Referenzen in C verboten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage