Ist es technisch korrekt zu sagen, dass Variablen und Konstanten Objekte von Datentypen sind?

8

Kann man sagen Variablen und Konstanten sind Objekte von Datentypen ?

Ich frage mich, was wäre die richtige Erklärung dafür

%Vor%

Hier können wir sagen, a ist ein Objekt vom Typ int und f ist ein Objekt vom Typ float ?

    
Rak 27.04.2013, 10:43
quelle

4 Antworten

12

Ja

Laut Paragraph 1.8 sind sowohl a als auch b Objekte ihrer entsprechenden Typen.

  

1 Ein Objekt ist eine Speicherregion. [Hinweis: Eine Funktion ist kein Objekt,   unabhängig davon, ob es den Speicher so belegt oder nicht   Objekte tun. -end Notiz] Ein Objekt wird durch eine Definition (3.1) erstellt, nach   ein neuer Ausdruck (5.3.4) oder bei Bedarf die Implementierung (12.2).   Die Eigenschaften eines Objekts werden beim Erstellen des Objekts festgelegt.   Ein Objekt kann einen Namen haben (Abschnitt 3). Ein Objekt hat eine Speicherdauer   (3.7), die seine Lebensdauer beeinflusst (3.8). Ein Objekt hat einen Typ (3.9).    Der Begriff Objekttyp bezieht sich auf den Typ, mit dem das Objekt ist   erstellt .

     

[intro.object]

und diese Variablen passen in die oben angegebene Definition.

    
deepmax 27.04.2013, 10:58
quelle
6

a und f sind Objekte vom Typ int bzw. vom Typ float . Ja, das widerspricht dem, was @Patashu sagt, und das liegt daran, dass wir verschiedene Definitionen von "Objekt" verwenden.

@Patashu verwendet die Definition aus objektorientierter Programmierung: Ein Objekt ist eine Sache mit Methoden usw. Und das ist völlig in Ordnung.

C ++ ist jedoch eine Sprache mit mehreren Paradigmen - es unterstützt mehr als ein Programmiermodell. Die C ++ - Sprachdefinition verwendet das Wort "Objekt" im weiteren Sinne, das von Compiler-Autoren verwendet wird: Ein Objekt ist eine Speicherregion mit verschiedenen Operationen, die auf diesem Speicher ausgeführt werden können. Die Operationen sind durch den Objekttyp definiert. Es gibt eine wohldefinierte Menge von Operationen, die auf ein Objekt vom Typ int angewendet werden können. Wenn Sie also wissen, dass Sie mit int zu tun haben, wissen Sie und der Compiler, was Sie damit machen können und, Implikation, was du damit nicht machen kannst.

    
Pete Becker 27.04.2013 10:58
quelle
1

Ich würde ja sagen. Ein Datenobjekt ist einfach eine Speicherregion, die einen Wert oder eine Gruppe von Werten enthält. Sowohl int a als auch float f stimmen dieser Definition zu. Wenn wir die Unterschiede zwischen diesen und den "traditionellen" Objekten in objektorientierten Sprachen sehen wollen, sollten wir das Konzept des -Datentyps zeigen, das dem Compiler hilft, Speicher für dieses Datenobjekt zuzuordnen und zu interpretieren Speicherwerte, wenn darauf zugegriffen wird.

Jedes Datenobjekt in C ++ muss einen Datentyp haben (Bezeichner für Datenobjekte und Datentypen werden in der Deklaration der Variablen / constant festgelegt ). Bei der Klassifizierung von Datentypen sehen wir, dass int a; und Object a; nicht "ganz gleich" sind:

int und float sind grundlegende Datentypen in dem Sinne, dass sie von der Sprache bereitgestellt werden. Der Object -Typ in diesem Beispiel wäre ein derived -Typ, da er aus Basistypen erstellt wird.

Datentypen können in andere, häufig überlappende Gruppen eingeteilt werden: Zum Beispiel kann man sagen, dass Object ein benutzerdefinierter -Typ ist; und dass int ein Skalar Typ ist, weil es einen einzelnen Datenwert darstellt.

    
Daniel Martín 27.04.2013 11:19
quelle
0

Nein

(oder vielmehr "wohl nicht")

Ad "Variablen und Konstanten sind Objekte von Datentypen" :

Sie finden zwar den Ausdruck "Objekt des Typs" im C ++ - Standard (wie "Objekt vom Typ T" [basic.def.odr] / 5) und den C-Standard (zB "Objekt vom Typ wchar_t") 3.7. 3), könnte man über die Verwendung des Begriffs "Variable" in Ihrem Beispiel zumindest in C ++ diskutieren:

[Basis] / 6

  

Eine Variable wird durch die Deklaration einer anderen Referenz als eines nicht statischen Datenelements oder eines Objekts eingeführt. Der Name der Variablen bezeichnet die Referenz oder das Objekt.

Also, int answer = 42; int& deepthought = answer; führt ein:

  • ein Objekt vom Typ int
  • eine Variable, Name answer , bezieht sich auf das obige Objekt
  • eine Variable, Name deepthought , die sich auf dasselbe Objekt bezieht

Aber eine Referenz AFAIK ist kein Objekt (muss nicht sein) - so könnte man argumentieren, dass Variablen nicht notwendigerweise Objekte sind. Natürlich sind sie nicht identisch, z.B. dynamische Speicherzuweisung.

Ad "a ist Objekt des Datentyps int und f ein Objekt des Typs float"

AFAIK, das dem Standard entspricht, obwohl, um genau zu sein, man etwas wie "bezeichnet", z.B. " a bezeichnet ein Objekt des Datentyps int".

Aber ich denke, es gibt keine Zweideutigkeit, daher halte ich es für OK.

    
dyp 27.04.2013 15:09
quelle

Tags und Links