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.
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.
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.
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:
int
answer
, bezieht sich auf das obige Objekt 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.