エラー、バグ、質問 - ページ 161

 
alexvd:

その前のアクションは?

アップデートは有効ですか?

数日間の不使用を経て、端末を開封。この写真を入手しました。そして、スクリプトを使って履歴をアップロードした。変更なし。待つこと数時間。今はすべて順調です。

 
MT5をリアル口座で動かしている人をどこで見つけられるか教えてください。
 
void OnStart()
  {
//---
   int x,y = 0;
   Print("x++:");
   x = x++;
   Print("x=",x," y=",y);
   y = x++;
   Print("x=",x," y=",y);
  }

なぜ、x=0とy=1なのか、説明できますか?ビルド342

PS.読むべき...x==1 and y==0 ...

 
Ashes:

なぜ、x=0とy=1なのか、説明できますか?ビルド342

ここをチェックhttps://www.mql5.com/ru/docs/basis/operations/mathoperation

コンパイラは、エラーや警告を表示しないのですか?

Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
Документация по MQL5: Основы языка / Операции и выражения / Арифметические операции
  • www.mql5.com
Основы языка / Операции и выражения / Арифметические операции - Документация по MQL5
 
Ashes:

なぜ、x=0とy=1なのか、説明できますか?ビルド342

確認したところ、結果はx=1, y=0

最初の増分 x=x++ は次のように分解される。

t=x;  // x=0
x++;  // x=1
x=t;  // x=0

 
Ashes:

なぜ、x=0とy=1なのか、説明できますか?ビルド342

はい、できます。x = x++の実装が全てです。

ポストインクリメントの前に、xの値は一時変数に保存されます。その後、インクリメントが行われる。そして、一時変数から代入が行われる。

 
Lizar:

こちらをご覧くださいhttps://www.mql5.com/ru/docs/basis/operations/mathoperation

コンパイラは、エラーや警告を表示しないのですか?

MT5コンパイラはそれを黙って飲み込んでしまうのですMT4ではコンパイルできません。

好奇心から、C++で同様の構成を試してみましたが(Visual Studio 2005より)、xとyの結果は同じでした。

 
Ashes:

なぜ、x=0とy=1なのか、説明できますか?ビルド342

変数に対してマット操作を行う前に、変数を初期化する必要があります。初期化されていない変数に代入するだけなら、すべてうまくいくでしょう。

しかし、トラブルを避けるために、変数を初期化するのは常に良いアイデアです。

void OnStart()
  {
//---
   int x=0,y = 0;
   Print("x++:");
   x++;
   Print("x=",x," y=",y);
   y=x;
   Print("x=",x," y=",y);
  }
 
Ashes:

MT5コンパイラは黙って飲み込む!MT4では、コンパイルに失敗します。

好奇心から、C++(Visual Studio 2005)で同様の構成で試してみましたが、xとyの結果は同じでした。

この場所はc++標準では定義されておらず、実装に依存することが明示されています。大きく分けて2つの実装があります。

1.式で変数を使用した直後にポストインクリメントを実行する。(してきたように)。

2.式全体が計算された後にポストインクリメントする。

 

つまり、どのブローカーがリアルタイムでMT5を動かしているかは、どこで確認できるのでしょうか?