printf vs. cout
-
thx
-
Ähm....
Was mir gerade einfällt (jetzt bin ich wach *g*)Diese Lösung
cout << static_cast<int>(test);
ist im Prinzip ja eigentlich das Gleiche wie
char test = 'a'; int temp = test; cout << temp << endl;
nur halt mit einem template, oder?
(Soll keine Kritik oder Ähnliches sein. Nur zur Info für mich.)
-
-=[P0I]=- schrieb:
Diese Lösung
cout << static_cast<int>(test);
ist im Prinzip ja eigentlich das Gleiche wie
char test = 'a'; int temp = test; cout << temp << endl;
nur halt mit einem template, oder?
Ein Template ist hier nicht involviert. Die Lösung ist insofern ähnlich, da auch hier ein int-Objekt erzugt wird (temporär und unbenannt).
Das gilt aber genauso für die Variante:int(test)
-
Im Prinzip ja... zumindest wenn der Optimierer damit fertig ist wird es wohl auf das gleiche rauskommen. Das ist übrigens keine template, sondern ein C++ - Cast.
-
Ein temporäres Objekt wird auch bei printf erzeugt. Erstens kann ein char einer Funktion mit variabler Argumentliste nicht direkt, sondern nur über den Umweg als int übergeben werden, zweitens ist es sowieso eine Übergabe by value.
-
Jester schrieb:
Im Prinzip ja... zumindest wenn der Optimierer damit fertig ist wird es wohl auf das gleiche rauskommen. Das ist übrigens keine template, sondern ein C++ - Cast.
soweit ich weiß ist das doch ein template wenn " <datentyp> " im spiel ist.
korrigiert mich wenn ich falsch liege.
-
Ich hab doch geschrieben: Das hier ist ein C++ cast. Kein template.
-
-=[P0I]=- schrieb:
soweit ich weiß ist das doch ein template wenn " <datentyp> " im spiel ist.
korrigiert mich wenn ich falsch liege.Man beachte, dass static_cast blau gefärbt ist - es ist also Magie, genau wie sizeof
-
OK OK, gewonnen:
aber bei templates verwendet man doch auch diese "<>"-Teile oder?
sagt mir bitte das ich jetzt mit dem wenigstens recht habe.
bitte......
-
ja. Es ist auch bestimmt die Intention bei den Casts an Templates zu erinnern, aber es handelt sich dennoch um Builtin Sachen.
-
oder sollen die templates vielleicht an casts erinnern?
-
wenigstens einmal recht
übrigens wurde meine ursprüngliche frage auch beantwortet
thx
( ich bin für die "casts sollen an templates erinnern"-Theorie
)
-
Templates gabs es schon im ARM (1990), die Casts kamen AFAIK erst viel später.
-
Bashar schrieb:
Templates gabs es schon im ARM (1990), die Casts kamen AFAIK erst viel später.
in der Zeit hab ich noch mit LEGO häuser programmiert
-
Liegt doch eigentlich nahe sich an den Templates zu orientieren, wenn man neue Casting-Operatoren einführt.
-
-=[P0I]=- schrieb:
[1990]
in der Zeit hab ich noch mit LEGO häuser programmiertIch auch, hab damals den Großteil meines "Begrüßungsgeldes" darin investiert. Das ARM hab ich erst sehr sehr viel später in die Finger bekommen
-
-=[P0I]=- schrieb:
Diese Lösung
cout << static_cast<int>(test);
ist im Prinzip ja eigentlich das Gleiche wie
char test = 'a'; int temp = test; cout << temp << endl;
nur halt mit einem template, oder?
Jein. Es macht in dem Fall dasselbe. Aber static_cast kann man auch für Typen verwenden, die man nicht einfach per Zuweisung umwandeln kann. (void* zu int* geht z.B. nicht ohne static_cast.) Falls das eine Frage nach der Macht war
-
operator void schrieb:
Jein. Es macht in dem Fall dasselbe. Aber static_cast kann man auch für Typen verwenden, die man nicht einfach per Zuweisung umwandeln kann. (void* zu int* geht z.B. nicht ohne static_cast.) Falls das eine Frage nach der Macht war
Ich meinte ja auch nur im PRINZIP und für diesen speziellen Fall
Auserdem ist das ja nicht eine frage der macht. das eine kanns das andere nicht. man muss sich halt das entsprechende aussuchen.
wenn alles alles könnte wärs ja auch langweilig
-
Naja, static_cast kann alles, was man zuweisen kann und mehr. Wenn ich static_caste, wo eine implizite Konvertierung reichen würde, fühle ich mich immer, als hätte ich eine Kettensäge der Hand.