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
非常清楚。謝謝 –