2 Stimmen

Sind Variablen vom einfachen Typ in C++ Objekte?

Sind Variablen vom einfachen Typ in C++ Objekte?

int x = 0;

Das hängt natürlich von der Definition des Objekts ab. So würde x Objekt in diesem Fall sein? Es ist zwar nicht in der Norm definiert, aber bitte geben Sie es an, wenn Sie sicher sind, dass es sich um ein Objekt handelt oder nicht.

10voto

AProgrammer Punkte 49452

Ja (Objekte in der Norm sind einfach eine Speicherregion - 1.8/1)

Eine Objekt ist eine Region der Lagerung. [Hinweis: Eine Funktion ist kein Objekt, unabhängig davon, ob sie Speicherplatz belegt oder nicht, wie es bei Objekten der Fall ist. ] Ein Objekt wird erzeugt durch eine Definition durch eine neue-ausdruck _ oder bei Bedarf durch die Implementierung.

Und für die Variable (3/4)

A Name ist die Verwendung eines Identifikators, der eine Einheit oder Etikett . A variabel wird durch die Deklaration eines Objekts eingeführt. Der Name der Variablen bezeichnet das Objekt.

Für Neugierige: Die Definition ist von C geerbt (mit den für C++ erforderlichen Änderungen). Der C 90 Standard besagt:

Objekt : Ein Bereich der Datenspeicherung in der Ausführungsumgebung, dessen Inhalt Werte darstellen kann. Werte darstellen kann.

2voto

Tony Delroy Punkte 98528

Ab 1.8.1

-1- Die Konstrukte in einem C++-Programm erzeugen, zerstören, verweisen auf Objekte, greifen darauf zu und manipulieren sie. Ein Objekt ist ein Bereich des Speichers. [Hinweis: Eine Funktion ist kein Objekt, unabhängig davon, ob sie Speicherplatz in der Weise belegt, wie es Objekte tun oder nicht. ] Ein Objekt wird durch eine Definition (basic.def), durch einen new-Ausdruck (expr.new) oder bei Bedarf durch die Implementierung (class.temporary) erzeugt. Die Eigenschaften eines Objekts werden bei der Erstellung des Objekts festgelegt. Ein Objekt kann einen Namen haben (Klausel basic). Ein Objekt hat eine Speicherdauer (basic.stc), die seine Lebensdauer (basic.life) beeinflusst. Ein Objekt hat einen Typ (basic.types). Der Begriff Objekttyp bezieht sich auf den Typ, mit dem das Objekt angelegt wird.

Sie ist auch in dieser Aussage aus 3.9.1 implizit enthalten:

Typen beschreiben Objekte (intro.object), Referenzen (dcl.ref) oder Funktionen (dcl.fct).

Damit "Objekte" alles zusammenfassen können, was anders als Referenzen oder Funktionen typisiert ist, muss es natürlich auch int et al.

Es ist erwähnenswert, dass Grundtypen wie int sind keine Objekte im "objektorientierten" Sinne, aber das ist ziemlich offensichtlich, wenn man bedenkt, dass sie dieselben sind wie in C, das keine objektorientierte Sprache ist.

0voto

Jerry Coffin Punkte 452852

Ja, das ist sie. Gemäß §7/5:

Wenn die decl-specifier-seq den typedef-Spezifizierer enthält, wird die Deklaration als typedef-Deklaration bezeichnet und der Name jedes init-Deklarators wird als typedef-name deklariert, synonym zu seinem zugehörigen Typ (7.1.3). Enthält der decl-specifier-seq keinen typedef-Spezifizierer, wird die Deklaration als Funktionsdeklaration bezeichnet, wenn der mit dem Namen verbundene Typ ein Funktionstyp ist (8.3.5), und andernfalls als Objektdeklaration.

Es handelt sich also um eine Objektdeklaration (die gleichzeitig eine Objektdefinition ist).

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