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.

18voto

Johannes Schaub - litb Punkte 479831

Variablen sind benannte Objekte. Die folgenden erstellen Objekte, die keine Variablen sind

new int // create one int object
std::string() // create one string object

Im Folgenden werden eine Array-Variable mit dem Namen "foo" und 5 unbenannte (Unter-)Objekte des Typs "int" erstellt

int foo[5];

Das Folgende ist keine Variable in C++03, sondern ist eine Variable geworden in C++0x (deklarierte Referenzen sind Variablen in C++0x, Details siehe Link)

extern int &r;

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

Variablen sind Objekte (bzw. Referenzen). Die Entitätsliste ( 3/3 in C++03) von C++ enthält mehrere solcher ist - Beziehungen. Ein Unterobjekt ist beispielsweise ein Objekt, ein Array-Element ist ein Objekt und ein Klassenmitglied ist ein Objekt oder eine Funktion oder ein Typ oder eine Vorlage oder ein Enumerator.

Die Entitätsliste von C++0x sieht für mich etwas aufgeräumter aus, und sie enthält keine "Variablen", "Funktionsinstanz" (was diese Art von Entität überhaupt ist, hat sich mir nie erschlossen), "Unterobjekt" und "Array-Element" mehr. Stattdessen wurden "Vorlagenspezialisierung" hinzugefügt, die entweder Funktionen, Klassen oder Vorlagen (partielle Spezialisierungen) sind.

Das C++-Objektmodell unter 1.8 sagt

Ein Objekt kann eine Name (Klausel 3).

Wenn Sie möchten, können Sie die Aussage also so formulieren: "Der Name des Objekts bezeichnet das Objekt".

1 Stimmen

Nur erklärt Referenzen sind Variablen in C++0x ;) Zum Beispiel, static_cast<Student&>(person) ist keine Variable, sondern eine "anonyme Referenz" in Ermangelung eines besseren Begriffs.

0 Stimmen

Ein anschaulicheres Beispiel für ein Objekt, das keine Variable ist, ist ein anonymes Objekt, das als Argument an etwas anderes übergeben wird.

0 Stimmen

@FredOverflow guter Punkt, ich werde es in die Antwort nach der Lektüre von FCD einbeziehen :)

2voto

Marcelo Cantos Punkte 173498

Variablen sind Namen, die Sie Objekten geben, also ja, Objekte sind im Großen und Ganzen anonym.

0 Stimmen

Ich finde es schwierig zu erkennen, welcher Teil Ihrer Antwort ungenau ist, weil Sie ihn heruntergestuft haben. Liegt es daran, dass die Antwort nur ein Satz ist, der nicht sehr technisch ist? Oder liegt es daran, dass ein Großteil der Objekte nicht anonym ist?

2voto

Keith Thompson Punkte 240701

Hier ist die Definition aus dem C++17-Standard:

A variabel durch die Deklaration eines anderen Verweises eingeführt wird als eines nicht statischen Datenelements oder eines Objekts. Der Name der Variablen, falls vorhanden falls vorhanden, bezeichnet die Referenz oder das Objekt.

Ehrlich gesagt bin ich der Meinung, dass dies keine wirkliche Definition ist. Es sagt uns, was stellt vor eine Variable, aber es wird nicht definiert, was eine Variable ist .

Nehmen wir zum Beispiel:

int foo = 42;

Dies ist die Deklaration eines Objekts, d.h. es wird eine Variable "eingeführt". Aber was ist die Variable? Ist das Objekt benannt foo eine Variable? Das hätte ich auch gedacht, aber die Definition sagt das eigentlich nicht. Offenbar hat die "Variable" einen Namen (in diesem Fall "foo") und dieser Name bezeichnet das Objekt. Da sie hat einen Namen, vermutlich ist der Name selbst nicht die Variable. Und es wäre einfach genug gewesen, zu sagen, dass die Variable ist das Objekt, und nicht, dass der Name der Variablen das Objekt bezeichnet, falls dies die Absicht war.

Was ist eine "Variable" in C++? Ich weiß es wirklich nicht, und ich glaube nicht, dass es möglich ist, die Frage auf der Grundlage des Wortlauts des Standards zu beantworten. (Und ich möchte, dass dies in einer zukünftigen Ausgabe korrigiert wird.)

(Der C-Standard geht damit um, indem er den Begriff "Variable" nicht definiert und ihn größtenteils nur als Adjektiv oder informell verwendet).

0 Stimmen

" Was ist eine "Variable" in C++? " Es ist ein Ding, das einen Bezug oder ein Objekt bezeichnet. Dieses Ding kann einen Namen haben. Eine Variable ist kein Objekt/Referenz; sie kennzeichnet ein Objekt/Verweis. Ich weiß nicht, was noch gesagt werden muss. Die Norm definiert auch nicht begrifflich, was eine "Entität" ist; sie sagt einfach, dass die Dinge X, Y und Z Entitäten sind.

0 Stimmen

@NicolBolas Das sagt immer noch nur, was es tut, nicht was es ist. Es ist ein "Ding". Was für ein Ding? Wenn ich "foo" auf ein Stück Papier schreibe, bezeichnet es dieses Objekt. Ist das Papier eine Variable? Inwiefern ist "Variable" ein nützliches Konzept?

0 Stimmen

Ich will damit sagen, dass die Norm solche Fragen im Allgemeinen nicht beantwortet. Die Norm erklärt nicht, was etwas bedeutet, sie beschreibt lediglich, was es ist. Wenn eine Deklaration ein Objekt oder eine Referenz einführt, führt dieser Prozess eine Variable ein, deren Name (falls vorhanden) das Objekt oder die Referenz bezeichnet.

0voto

Chris Punkte 1402

Eine Variable ist einfach eine Einheit mit einem Typ und einem Namen

0voto

TTDS Punkte 69

Wie ich erfahren habe

Was sind Variablen

Eine Variable ist ein Bezeichner, der an einen Wert gebunden ist, der im Speicher des Systems gespeichert ist (imperative Sprachen) oder ein Ausdruck, der ausgewertet werden kann (funktionale Sprachen).

Warum wir Variablen brauchen

  • bieten Namen für Speicherchunks, um Daten während der Lebensdauer eines Computerprogramms vorübergehend zu speichern.
  • werden auch in der Programmierung verwendet, um Informationen von einem Teil des Programms zu einem anderen Teil zu übertragen (z.B.: Parameter, globale Variablen).

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