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

Warum sind Arrays von Referenzen in C verboten?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-05 14:21:10423Durchsuche

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};

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};
}

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!

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