glaube, ich habe eine Algol-ähnliche Sprache, mit statischen Typen und den folgenden Code:statischen Typen und Umbauten
a := b + c * d;
wo a
ist ein Schwimmer, b
eine ganze Zahl, c
ein Doppel- und d
eine lange . Dann wandelt die Sprache d
in lang, um mit c
zu arbeiten, und b
verdoppelt, um mit c*d
Ergebnis zu arbeiten. Danach wird das doppelte Ergebnis von b+c*d
in Float konvertiert, um das Ergebnis a
zuzuordnen. Aber, wenn es passiert? Ich meine, erfolgen alle Konvertierungen zur Laufzeit oder zur Kompilierzeit?
Und wenn ich:
int x; //READ FROM USER KEYBOARD.
if (x > 5) {
a:= b + c * d;
}
else {
a := b + c;
}
Der obige Code conditionals hat. Wenn der Compiler dies zur Kompilierzeit konvertiert, kann ein Teil möglicherweise nie ausgeführt werden. Ist das richtig?
Aber der Compiler kennt die Variablentypen, ist es wichtig, den Wert in der Variablen? –
@ TomiSebastiánJuárez: Der Compiler kann * einen Code ausgeben, der die Umwandlung durchführt, weil er weiß, was der Variablentyp ist. Aber es kann * die Umwandlung * nicht ausführen, außer es kennt auch den Wert in der Variable. Es unterscheidet sich nicht von "a + a". Wenn der Compiler wüsste, dass der Wert in "a" "2" ist, könnte er die Addition durchführen und den Ausdruck durch "4" ersetzen. Ansonsten kann es nur Code ausgeben, um die Addition durchzuführen. – rici
Sehr klar. Vielen Dank –