0
假设我有一个类ALGOL语言,用静态类型和下面的一段代码:静态类型和转换
a := b + c * d;
其中a
是浮点数,b
的整数,c
双和d
长。然后,语言将转换d
长期与c
进行操作,并b
翻番与c*d
结果进行操作。因此,在此之后,b+c*d
的双重结果将被转换为浮点数,以将结果分配给a
。但是,当它发生时,我的意思是,所有的转换是在运行时还是编译时间发生的?
如果我有:
int x; //READ FROM USER KEYBOARD.
if (x > 5) {
a:= b + c * d;
}
else {
a := b + c;
}
上面的代码具有条件语句。如果编译器在编译时将其转换,则某些部分可能永远不会运行。它是否正确?
但是编译器知道变量的类型,这很重要变量中的值? –
@TomiSebastiánJuárez:编译器可以发出执行转换的代码,因为它知道变量类型是什么。但它不能*做转换*,除非它也知道变量的值。它与'a + a'没有区别。如果编译器知道'a'中的值是'2',它可以进行加法并用'4'替换表达式。否则,它所能做的就是发出代码进行添加。 – rici
非常清楚。谢谢 –