2017-03-22 11 views
4

我很驚訝地發現,浮點值可以被Delphi中的Variant分開。什麼可以做一個簡單的例子:爲什麼我可以在Delphi中將Single by Variant分開,它是幹什麼用的?

var 
    v: Variant; 
begin 
    v := 2.3; 
    Tag := 5.1 div v; // 2 
    Tag := 5.1 mod v; // 1 
    Tag := 5.1 div 2; // [dcc32 Error] E2015 Operator not applicable to this operand type 
    Tag := 5.1 mod 2; // [dcc32 Error] E2015 Operator not applicable to this operand type 
end; 

它看起來像德爾福輪左部和右部做div/mod操作之前。

我期望上面的代碼在編譯時在所有4行中產生錯誤,因爲我的理解是div/mod無論如何都不適用於浮點值。顯然情況並非如此。

爲什麼我可以在Delphi中將Single by Variant分開,它需要什麼?

+0

這只是變種強制。變體旨在允許儘可能多的類型轉換。如果你想了解更多關於爲什麼那麼你應該看看MS COM文檔。 –

回答

7

Variants in Expressions來自:

如果表達式結合靜態類型值變型中,靜態類型值被自動轉換爲變體。

這意味着浮點類型文字首先被轉換爲變體。

然後,在執行div/mod操作之前,將這兩個變體隱式轉換爲整數值以匹配運算符。 Variant Type Conversions

..它需要什麼?

只是爲了儘可能多樣化,並完全支持OLE。

+0

你不覺得這種類型是爲了匹配COM變體類型嗎? –

+0

@DavidHeffernan,那太明顯了。更新了答案。謝謝。 –

+1

要挑剔,我不認爲「OLE」在這裏是正確的名詞。應該是「COM」。 – kobik

相關問題