dynamic_cast<>()
-
zu 1:
man sollte den neuen verwenden. sprich:<name>_cast<T>(Ausdruck)
die "neuen" casts in c++, static_cast, dynamic_cast, const_cast und reinterpret_cast, unterscheiden zum einen nach der art der umwandlung (siehe dazu faq) und sind zum anderen im quelltext gut zu erkennen, anders die c casts, die oft "verschwinden" beim lesen von code.
zu 2:
man nennt implizite typumwandlung nur implizite typumwandlung. der begriff "cast" findet sich meines wissens nur bei der expliten typumwandlung, also wenn der programmierer/die programmiererin die umwandlung selber in die hand nimmt.
-
Also würde man in beiden Fällen von einem Cast sprechen, wenn ich das Umwandeln selbst vornehme.
Danke.
-
ingoingo schrieb:
1. Kann man weiterhin den alten cast verwenden, z. B. f = float(i), oder sollte man nur noch den neuen verwenden: f = static_cast<float>(i)?
Hier ist kein "alter cast" anwesend.
-
Es würde mir mehr helfen, wenn du sagen würdest, warum nicht.
-
Ein cast geht so:
(int)
Was du anwendest, ist ein operator.
-
definiere 'operator'
-
Du weisst nicht, was ein Operator ist?? *staun*
class Integer { public: Integer() { x = 5; } operator int() { return x; } private: int x; }; int main() { Integer a; int x = 17 + int(a); // operator int() cout << x << "\n"; // gibt 22 aus. }
-
Integer a; cout << (int)a << "\n"; // gibt 5 aus. cout << int(a) << "\n"; // gibt 5 aus. cout << a << "\n"; // gibt 5 aus. cout << static_cast<int>(a) << "\n"; // gibt 5 aus.
und jetzt?
int i = 42; double d = double(i); //etwa int::operator double?
hört sich mehr nach function-style cast an.
mehr info unter 5.2.3
-
Ein function-style-Cast ist ein Konstruktoraufruf, kein Cast-Operator. Daraus folgt, dass ein Cast nicht unbedingt ein Operator sein muss. (Wenn man schon Haare spalten will, dann richtig. Darum scheint es ja in diesem Thread wenigstens partiell zu gehen.)
Hume: Der function-style-Cast ist nicht wesentlich älter als foobar_cast<>()? *staun*
-
Prima, wie ihr hier helft. Jetzt ist alles klar.
-
[schmarrn]
-
@Bashar
Ich kenne den Ausdruck "alter Cast" nur als Synonym für "C-style" Cast. Der function-style cast, als reiner C++ Cast, zählt insofern nicht dazu. Wenn du allerdings einschlägige Quellen kennst, die "alter Cast" in diesem Zusammenhang anders definieren, habe ich auch kein Problem damit meine Aussage zurück zunehmen.
-
Ich kenne den Begriff "alter Cast" nur als Gegensatz zu den "neuen" Cast-Operatoren. Da das kein Fachbegriff ist, tu ich mich allerdings ein bisschen schwer mit Quellen
-
Was ist ein function-style Cast?
-
int i = int(x)
double d = double(x)
-
Aus sicht des function-style-casts ist der C-cast alt, aus sicht der Tempalte-Casts ist der function-style-cast alt. Alles ist relativ