假设我有一种类似 algol 的语言,具有静态类型和以下代码:
a := b + c * d;
其中a是浮点数、b整数、c双精度和d长整数。然后,语言将转换d为 long 来操作c,并转换b为 double 来操作c*d结果。因此,在那之后, double 结果b+c*d将转换为 float 以将结果分配给a. 但是,当它发生时?我的意思是,所有转换都发生在运行时还是编译时?
如果我有:
int x; //READ FROM USER KEYBOARD.
if (x > 5) {
a:= b + c * d;
}
else {
a := b + c;
}
上面的代码有条件。如果编译器在编译时转换它,某些部分可能永远不会运行。这个对吗?