/ / Unterschied zwischen Erweiterung und Einengung in C ++? - c ++, oop

Unterschied zwischen Verbreiterung und Verengung in C ++? - C ++, oop

Was ist der Unterschied zwischen Erweiterung und Verengung in c ++? Was ist mit Gießen gemeint und welche Arten von Gussteilen gibt es?

Antworten:

6 für die Antwort № 1

Dies ist eine generelle Casting-Sache, nicht C ++ - spezifisch.

Eine "Verbreiterung" ist eine Besetzung von einem Typ biseine andere, wo der "Ziel" -Typ einen größeren Bereich oder eine größere Genauigkeit als die "Quelle" hat (z. B. int bis long, float to double). Eine "Verengung" ist das genaue Gegenteil (long bis int). Ein schmälerer Gipsverband führt die Möglichkeit eines Überlaufs ein.

Erweiterungsmodelle zwischen eingebauten Grundelementen sindimplizit, dh Sie müssen den neuen Typ nicht mit dem Umwandlungsoperator angeben, es sei denn, Sie möchten, dass der Typ während einer Berechnung als breiterer Typ behandelt wird. Standardmäßig werden Typen in den breitesten tatsächlichen Typ umgewandelt, der auf der Seite der Variablen eines binären Ausdrucks oder einer binären Zuweisung verwendet wird, wobei auf der anderen Seite keine Typen gezählt werden.

Enge Casts müssen dagegen explizit umgesetzt werden, und Überlaufausnahmen müssen behandelt werden, es sei denn, der Code wird als nicht auf Überlauf geprüft markiert (das Schlüsselwort in C # lautet) unchecked; Ich weiß nicht, ob es für diese Sprache einzigartig ist.


4 für die Antwort № 2

Die Konvertierung wird erweitert, wenn Sie von einer Ganzzahl zu einer Doppelzahl wechseln und die Genauigkeit der Besetzung erhöhen.

Die Einschränkung der Konvertierung ist die Umkehrung davon, wenn Sie von Double zu Integer wechseln. Sie verlieren an Präzision

Es gibt zwei Arten des Castings: implizites und explizites Casting. Die folgende Seite wird hilfreich sein. Auch die gesamte Website ist ziemlich genau das Richtige für C / C ++.

Tutorial zu Casting und Konvertierung


1 für die Antwort № 3

Prüfung nach Hause nehmen? :-)

Nehmen wir zuerst das Casting. Jedes Objekt in C oder C ++ hat ein ArtDies ist nichts anderes als der Name gibt zwei Arten von Informationen an: Wie viel Speicher nimmt das Ding ein und welche Operationen können Sie daran vornehmen?

Damit

 int i;

bedeutet nur das i bezieht sich auf einen Speicherplatz (normalerweise 32 Bit breit), auf den Sie zugreifen können +,-,*,/,%,++,-- und einige andere.

Ci ist aber nicht sehr wählerisch:

 int * ip;

definiert einen anderen Typ, genannt Zeiger auf Ganzzahl was eine Adresse im Speicher darstellt. Es hat eine zusätzliche Option, das Präfix *. Auf vielen Maschinen das ebenfalls ist 32 Bit breit.

EIN Besetzung, oder typecast den Compiler anweisen, den als einen Typ identifizierten Speicher als einen anderen Typ zu behandeln. Typecasts werden als geschrieben (typename).

Damit

 (int*) i;

bedeutet "behandeln" i als wäre es ein Zeiger, und

 (int) ip;

bedeutet den Zeiger behandeln ip als nur eine ganze Zahl.

Nun, in diesem Zusammenhang, Erweiterung und Verengung bedeutet das Casting von einem Typ zu einem anderen mit mehr oder weniger Bits.