2011-01-14 11 views
2

, wenn ich einige Ausdruck auf C++ haben:const variable Paradox

const int x = 3; 

kann ich sagen, dass x eine Variable ist? Es scheint sehr seltsam Ursache x ist nicht variabel, weil ich es nicht ändern kann, danke im Voraus für alle Erweiterungen

Bearbeitet P.S. Danke für alle Antworten, ich habe verstanden, dass nach der Definition von C++, Antwort für meine Frage ja sein kann, kennen Sie einige andere Sprachen, in denen die Antwort für meine Frage nein sein wird?

+4

Ich erwartete einen Beitrag über eine Variable, die in der Zeit zurück gereist ist und ihre eigene Deklaration in "const" geändert hat. – Aphex

+0

Variable durch welche Definition? Der C++ - Standard oder die englische Sprache? –

+0

Das Wort "Variable" impliziert "etwas, das variiert", aber das ist nicht die formale C++ - Definition. –

Antwort

5

Ja. x ist eine Variable, obwohl Sie ihren Wert (legitimerweise) nicht ändern können.

Effektiv, in C++, ein Objekt, das einen Namen hat, ist eine "Variable".

+2

Ich würde nicht zustimmen (obwohl nicht abstimmen). Eine Konstante ist KEINE Variable; es ist eine Konstante und "jedes Objekt, das einen Namen hat" ist ebenfalls falsch (eine int Konstante ist kein Objekt).;-) Nach deiner Logik wäre ein #DEFINE auch eine Variable, weil ich #DEFINE aVar, einen Namen (aVar) geben kann. –

+5

@Ken: 'aVar' ist keine Variable, weil es kein benanntes Objekt ist (es ist der Name eines Makros). Ein "const int" ist tatsächlich ein Objekt und kann als ein Objekt verwendet werden (z. B. kann man seine Adresse nehmen). Der C++ - Standard besagt: "Eine Variable wird durch die Deklaration eines Objekts eingeführt. Der Name der Variable bezeichnet das Objekt" (3/4). Über die Bedeutung des Wortes "Variable" kann man sicherlich im Allgemeinen nicht stimmen, aber in C++ hat es eine spezifische Bedeutung (technisch ändert sich die Bedeutung in C++ 0x, so dass die meisten Referenzen auch richtig als Variablen bezeichnet werden können). –

+0

Gerade hoffentlich hat Bjarne das Wort "readonly" anstelle von "const" benutzt. Das Nachdenken über eine readonly Variable ist vielleicht einfacher. –

1

Dies ist philosophisch, es kann nicht geändert werden, in der Tat einige Compiler wie GCC speichert es im Text-Abschnitt. So oder ist eine nicht veränderbare Variable oder eine Konstante.

1

C++ Terminologie der Begriff Variable fast synonym mit dem Begriff Objekt ist: jede erklärt Objekt eine Variable ist. Ob das Objekt veränderbar ist oder nicht, macht keinen Unterschied. Also, in der offiziellen Terminologie ja, x ist eine Variable.

0

In der Definition ISO Sprache für C++ ein solches Objekt ist als const-Variable bezeichnet, eine Variable read-only Bedeutung. In Begriffen und in natürlicher Sprache Semantik ist es dennoch eine Konstante.

Ich stelle mir den Begriff lediglich ein konstantes Objekt (wie x in Ihrem Beispiel) verwendet wird, zu unterscheiden von einem literalem Konstante, (wie 3), wo man ein adressierbaren Objekt ist, und der andere ist nicht. Der Begriff const object wird nicht verwendet, da sich ein Objekt auf die Instanz im Speicher bezieht, während eine Variable einen Namen oder eine Kennung verweist, die einem Objekt zugeordnet ist.

0

BTW ist es sinnvoll, für eine Funktionsdeklaration, zum Beispiel

void ReadStuff(const int a) 

Dies bedeutet, dass Sie tatsächlich die Funktion eines nicht statischen Variablen geben kann, aber es wird als eine Konstante (dh behandelt werden. Die Funktion ändere es nicht).

+0

Ein Const-Qualifikationsmerkmal der obersten Ebene dieses hat tatsächlich keine Auswirkung auf Funktionsdeklarationen im Allgemeinen; Diese Deklaration ist genau identisch mit 'void ReadStuff (int a)'. Const-Qualifikationsmerkmale der obersten Ebene wirken sich nur dann aus, wenn sie in der Definition der Funktion erscheinen. (Ich weiß nicht, was Sie mit "einer nicht statischen Variable" meinen. Was hat das mit statischer Elektrizität zu tun?) –