假设我有一种类似 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;
}
上面的代码有条件。如果编译器在编译时转换它,某些部分可能永远不会运行。这个对吗?