Heim >Backend-Entwicklung >C++ >Warum sind Arrays von Referenzen in C verboten?
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!