2017-03-22 3 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; 

Delphiはdiv/mod操作を行う前に、左部分と右部分を丸めように見えます:何ができるかの簡単な例。

上記のコードでは、コンパイル時にすべての4行でエラーが発生すると予想していますが、div/modは浮動小数点値には適用できません。明らかに、これは当てはまりません。

なぜ私はDelphiでバリアントを分割することができますか?何が必要ですか? Variants in Expressionsから

+0

これは単なるバリアント型強制です。バリアントは、想像できるほど多くの型変換を可能にするように設計されています。なぜあなたはMS COMのドキュメントを見てくださいする必要がありますかについてもっと知りたい場合。 –

答えて

7

式が静的に型付けされた値を有する変異体を組み合わせた場合は、静的に型付けされた値が自動的にバリアントに変換されます。

これは、浮動小数点型のリテラルが最初にバリアントに変換されることを意味します。

次に、div/mod操作を実行する前に、両方のバリアントが暗黙的に整数値に変換されて演算子に一致します。 Variant Type Conversions

とは何ですか?

できるだけ汎用性が高く、OLEを完全にサポートしてください。

+0

このタイプはCOMバリアントタイプと一致するように設計されているとは思いませんか? –

+0

@DavidHeffernan、あまりにも明らかでした。更新された答え。ありがとう。 –

+1

わかりにくいですが、私はここで "OLE"が正しい用語ではないと思います。 "COM"でなければなりません。 – kobik

関連する問題