静态类型和转换

Static types and conversions

假设我有一种类似算法的语言,具有静态类型和以下代码:

a := b + c * d;

其中 a 是浮点数,b 是整数,c 是双精度数,d 是长整型。然后,该语言会将 d 转换为 long 以与 c 进行运算,并将 b 转换为 double 以与 c*d 结果进行运算。所以,之后,b+c*d的double结果将被转换为float,将结果赋值给a。但是,什么时候发生?我的意思是,所有转换都发生在 运行 时间还是编译时间?

如果我有:

int x; //READ FROM USER KEYBOARD.
if (x > 5) {
    a:= b + c * d;
}
else {
    a := b + c;
}

上面的代码有条件。如果编译器在编译时转换它,某些部分可能永远不会 运行。这是正确的吗?

您不能在 compile-time 处进行转换,就像您不能在编译时进行加法一样(除非编译器可以确定变量的值,也许因为它实际上是常量)。

编译器可以(并且确实)发出一个程序,其中包含对变量值进行加法和乘法运算的指令。如果有必要,它还会发出指令,在计算之前将存储值的类型转换为不同的类型。

没有固定变量类型的语言 compile-time 必须在运行时执行检查并有条件地将值转换为不同的类型。但我不认为 "Algol-like".

的一般类别中包含的任何语言都是这种情况