9 Stimmen

Was genau ist eine Variable in C++?

Die Norm besagt

A variabel wird durch die Deklaration eines Objekts eingeführt. Der Name der Variablen bezeichnet das Objekt.

Aber was bedeutet diese Definition eigentlich?

Gibt eine Variable einem Objekt einen Namen, d.h. sind Variablen nur ein Benennungsmechanismus für ansonsten anonyme Objekte? Oder ist eine Variable der Name selbst?

Oder ist eine Variable ein benanntes Objekt in dem Sinne, dass jede Variable auch ein Objekt ist?

Oder ist eine Variable nur ein "Proxy" mit einem Namen, der alle Operationen an das echte Objekt "delegiert"?

Um die Dinge weiter zu verwirren, scheinen viele C++-Bücher Variablen und Objekte als Synonyme zu behandeln.

Was ist Ihre Meinung dazu?


Über Entitäten, zitiert aus dem C++0x Entwurf:

Eine Entität ist ein Wert, ein Objekt, eine Referenz, eine Funktion [...]

Jeder Name, der eine Entität bezeichnet, wird durch eine Erklärung eingeleitet.

Eine Variable wird durch die Deklaration eines Objekts eingeführt

Aus diesen Aussagen ziehe ich den Schluss, dass eine Variable ein Name ist und somit kein Objekt sein kann. Das verwirrt mich jetzt wirklich gewaltig :)

0 Stimmen

Mein lahmer Versuch: Eine Variable ist ein lWert, der zugewiesen werden kann, wenn er nicht gekennzeichnet ist const .

0 Stimmen

Eine Variable ist im Grunde nur eine Etikett die den Zugriff auf den Inhalt eines bestimmten Speicherplatzes ermöglicht - im Vergleich zu einem Zeiger, der die Adresse eines bestimmten Speicherplatzes als Wert enthält.

-1voto

Adrian Regan Punkte 2240

Ich denke, dass diese Definition ziemlich klar ist.

Die Variable wird durch Deklaration eingeführt und bezeichnet das Objekt. Wer führt die Variable ein? Sie selbst natürlich, und somit sind Sie es, der sie verwendet.

Eine Variable ist eigentlich nur eine Erleichterung für Sie als Entwickler. Sie ist ein grundlegender Aspekt von Die meisten Programmiersprachen, nicht nur C++. Eine Variable gibt lediglich einen symbolischen Namen für eine verwendbare Einheit, die Speicherplatz belegt, so dass sie an einer späteren Stelle in Ihrem Quellcode referenziert und verwendet werden kann.

Wenn Sie zum Beispiel eine Variable in einer Methode als solche deklarieren:

int x = 5;

Dieser wird vom Compiler auf einen Offset vom Stapelzeiger reduziert, beispielsweise SP + 0x003.

Irgendwann später können Sie sagen:

x = 52;

In diesem Fall wird der Bereich des Stapelspeichers SP + 0x003 die Bytes enthalten, die die Zahl 52 beschreiben.

Sie deklarieren die Variable als einen bestimmten Typ, damit der Compiler berechnen kann, wie viel Platz die Daten im Speicher einnehmen. Ohne Variablen müssten Sie sich selbst um die Anordnung der Informationen kümmern und würden wahrscheinlich in Assembler oder einer niedrigeren Programmiersprache programmieren.

1 Stimmen

Ich finde Ihre Definition "Die Variable wird durch eine Deklaration eingeführt und bezeichnet das Objekt" sehr klar, aber leider ist das nicht das, was die Norm sagt :) Nach dem Standard deklariert man Objekte und es ist nicht die Variable, die das Objekt bezeichnet, sondern die Variable selbst Name :(

0 Stimmen

Hey, vielleicht sollte ich sogar ein Autor von Standards werden :-). Nebenbei bemerkt, ich denke, eine Sprache zu lernen, indem man ihr Standarddokument liest, ist eine Form der Selbstverletzung...

-1voto

t0mm13b Punkte 33393

Eine Variable ist eigentlich ein Name, der einem Objekt im Speicher gegeben wird, und daher ist ein Objekt in dieser Hinsicht ein anonymer Typ, und zwar nur zum Zeitpunkt vor der Kompilierung. Wenn die Kompilierung stattfindet, wird die Variable während der syntaktischen und der Parsing-Phase verfolgt, und wenn dann der Linker einsetzt, wird dieser Variable eine Speicheradresse zugewiesen, obwohl diese Speicheradresse zur Laufzeit irgendwo korrekt verschoben wird, um dynamisches oder statisches Linking zu berücksichtigen. Daher kann die Variable dann einfach unter der Speicheradresse referenziert werden, der die Variable zugewiesen ist.

Kurz gesagt, die Variable soll dem Programmierer helfen, die Knotenpunkte der Ausführung zu bestimmen, an denen die Variable im Maschinencode referenziert wird.

-1voto

SigTerm Punkte 25410

Was ist Ihre Meinung dazu?

Eine Variable ist ein Speicherblock auf dem Stack oder in einem Codesegment oder ein Wert in einem Register (wenn die Größe der Variable klein genug ist, obwohl sie normalerweise immer noch ein Wert in einem Speicher ist, während Register temporäre Ergebnisse enthalten), mit einem Namen, der der Bequemlichkeit des Programmierers dient. Der Variablenname existiert nach der Kompilierung nicht mehr (wir sprechen hier nicht über Makrotricks). Jeder Zugriff auf die Variable wird in einen Speicherzugriff umgewandelt, d.h. technisch gesehen ist die Variable eine Adresse des entsprechenden Datenblocks, und diese Adresse wird nirgendwo gespeichert. Denken Sie an die Deklaration von Variablen in Assembler-Sprachen - die Variable existiert "irgendwie", aber sie ist trotzdem nur ein Offset zum Datenblock.

0 Stimmen

Objekte befinden sich auf dem Heap, auf dem Stack oder im Datensegment.

0 Stimmen

Sie haben mich verstanden, es gibt also keinen Grund für Erbsenzählerei.

0 Stimmen

Das ist die einzig gute Antwort. Variablen sind eigentlich nur Zeiger auf Speicheradressen, die der Compiler für Sie herausfindet, weil es idiomatischer ist, einen Namen statt einer Zahl zu verwenden.

-1voto

fastcodejava Punkte 37539

Variable ist ein Name für das Objekt. Der Zugriff auf das Objekt erfolgt über diese benannte Entität.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X