2010年5月1日土曜日

★MQL4の落とし穴 ‐ キャスト
MQL4 Trap: Casting Trap


さて、以下のコードをメタトレーダー4(MT4)で実行すると結果はどうなるだろうか。
int i = 3;
double d0 = 1 / i;
double d1 = (double)1 / i;
double d2 = 1 / (double)i;
double d3 = 1.0 / i;
Print("d0= ", d0, ", d1= ", d1, ", d2= ", d2,
      ", d3= ", d3);
C/C++であれば結果は(Printをprintfに変えると)、d2/d3はキャスト「(double)」によりint→doubleの変換が行われ
d0= 0.000000, d1= 0.333333, d2= 0.333333, d3= 0.333333
となる。
ところが、MQL4では上記の結果は、
d0= 0, d1= 0, d2= 0, d3= 0.3333
と、d1/d2の結果がd0と同じになっている。(キャストがきいていない)
うーん、これはなんだ、と思いつつMQL4のリファレンスを探ってみると…
MQL4 Reference→Basics→Data types→Type casting
Only implicit type casting is used in MQL 4 expressions.
The type priority grows at casting:

int  (bool,color,datetime);
double;
string;
なんと、int/double/stringの暗黙変換以外キャストは使えないようだ… だったらせめて警告でもだしてちょーよと。
  • 教訓: Cと思うな思うと負けよ

0 件のコメント:

コメントを投稿