wenn werden cast-ausdrücke auswertet?
-
in c geht das alles zur compiletime. zur compiletime stehen alle typen fest und zur runtime wird nichts mehr gemacht.
-
c.rackwitz schrieb:
in c geht das alles zur compiletime. zur laufzeit stehen alle typen fest.
sicher?
im asm kommt sowas raus:
;int * p = (int *) &d; lea ebx,dword ptr [ebp-8]
;int x = (int)d; ; ?live1@48: ; EBX = p fld qword ptr [ebp-8] call __ftol // hier ein "call" wohin auch immer
-
dir ist klar, was typen und casts sind?
zur compiletime stehen alle typen fest. zur laufzeit werden konvertierungen gemacht, aber von wo nach wo steht schon lange fest.
mit assembler um sich schmeissen, wenn es um casts geht, zeugt von "thema verfehlt".
-
Danke, wie immer, für deine kompetente Antwort
-
da sag doch mal einer was gegen buecherwissen...
-
c.rackwitz schrieb:
dir ist klar, was typen und casts sind?
zur compiletime stehen alle typen fest. zur laufzeit werden konvertierungen gemacht, aber von wo nach wo steht schon lange fest.
mit assembler um sich schmeissen, wenn es um casts geht, zeugt von "thema verfehlt".
Als "zur Compilezeit" verstehe ich, dass "zur Laufzeit" keine weiteren Berechnungen
etc. mehr notwendig sind, d. h. ein Wert beim Compilieren in eine Form gebracht
wird, die direkt verwendet werden kann:
Die Adresse des doubles geladen, ohne dass damit noch irgendwas passieren muss.Das andere Beispiel zeigt, dass der Double-Wert zur Laufzeit in eine Ganzzahl umgerechnet wird.
=> Umwandlung von "double" nach "int" passiert zur Laufzeit
-
casten hat was mit typumwandlung zu tun. dabei wird zwangslaeufig konvertiert (verlustfrei oder mit verlust).
wenn du statt des casts eine explizite umwandlung angeben wuerdest, waere das das gleiche.
-
c.rackwitz schrieb:
wenn du statt des casts eine explizite umwandlung angeben wuerdest, waere das das gleiche.
cast == explizite Typumwandlung
-
mit explizit meinte ich eher etwas, wo man auch den ausgangstypen kennen muss. ist bei casts ja nicht der fall.
-
Auswerten eines Ausdrucks heisst das Ergebnis des Ausdrucks bestimmen. Bei einem Cast-Ausdruck ist das die Typumwandlung, und die findet im Normalfall zur Laufzeit statt. Ausser sie ist trivial, dann wird sie wegoptimiert, oder die beteiligten Groessen sind compilezeit-konstant, dann passiert sie u.U. zur Compilezeit.