mql5言語の特徴、微妙なニュアンスとテクニック - ページ 202 1...195196197198199200201202203204205206207208209...247 新しいコメント Artyom Trishkin 2021.05.14 12:53 #2011 このトピックに関係のないコメントは、「MQL5 MT5 MetaTrader5初心者からの質問」に移動しました。 fxsaber 2021.05.20 09:50 #2012 標準関数は、左から右に引数を受け取ります。 カスタム関数は、右から左へ引数を受け取ります。 double f1() { Print(__FUNCSIG__); return(0); } double f2() { Print(__FUNCSIG__); return(0); } void Func( double, double ) { } #define PRINT(A) Print(#A); A void OnStart() { PRINT(MathMin(f1(), f2())); PRINT(Func(f1(), f2())); } 結果 MathMin(f1(),f2()) double f1() double f2() Func(f1(),f2()) double f2() double f1() これがあるべき姿なのか? Andrei Trukhanovich 2021.05.20 10:18 #2013 fxsaber:そういうものなのでしょうか? これは、あてにならないUBです。すなわち、プログラムの論理が引数の評価順序に依存するような事態は明示的に避けなければならない。 A100 2021.05.20 10:51 #2014 fxsaber:通常の関数は、左から右へ引数を受け取ります。 ここで、反論の例を挙げます。 string f1() { Print(1); return NULL; } string f2() { Print(2); return NULL; } void OnStart() { StringCompare(f1(), f2()); } 結果:2 1 fxsaber 2021.05.20 11:15 #2015 Andrei Trukhanovich:これは、あてにならないUBです。つまり、プログラムの論理が引数の評価順序に依存するような事態は明示的に避けなければならないのです A100: ここで、反論の例を挙げます。 カスタム品ではすべてが不安定になることが判明しました。カスタムメイドの場合、最初からすべてが不安定です。 A100 2021.05.20 11:43 #2016 fxsaber:標準のものでは、すべてが不安定であることがわかりました。カスタムメイドのものであれば、最初から曖昧さはありません。 違いは、通常の関数(右から左へ)とインライン関数(順序は不定)があることです。 インライン関数は関数ではなく、アドレスを持つことができません。この観点からすると、通常の関数とカスタム関数の違いはなく、例えば、最も単純なカスタム関数(要するにインライン)の引数が常に右から左に計算される理由は不明である。将来的にインライン関数で順番が変わる可能性は否定できないので 一時期、計算の順番を安全に使うためのインラインキーワードを導入することを提案したことがあります。 トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム エラー、バグ、質問 A100, 2017.10.05 14:30 これは、C++のinlineキーワードの有用性を改めて示すものです(ここでは、inlineキーワードは時代遅れという意見もあったようです)。 中でもインラインとは、実際にはプログラマが関数のパラメータの計算順序を使用しないことを意味し、コンパイラがインライン関数をインライン化することを決定した場合、コンパイラは順方向の計算順序をより効率的に使用できる(逆方向の計算順序は明らかに呼び出された関数にのみ効率的である)ことを意味します。 同時に、コンパイラがインラインでない関数を埋め込むことを決定した場合、たとえそれが効率の低下につながるとしても、(プログラマが関数のインライン化を宣言せずにこの順序を仮定したため)評価の(一般的な)逆の順序を使用する必要があります。 インラインは、計算順序を明示的に制御できないMQLでも適切です。 fxsaber 2021.05.20 11:53 #2017 A100:違いは、通常の関数(右から左へ)とインライン関数(順序は不定)があることです。インライン関数は関数ではなく、アドレスを持つことができません。この観点からすると、通常の関数とカスタム関数の違いはなく、例えば、最も単純なカスタム関数(要するにインライン)の引数が常に右から左に計算される理由は不明である。将来的にインライン関数で順番が変わる可能性は否定できないので私は一時期、計算順序を安全に使用するためのインラインキーワードの導入を提案したことがあります。 わかりやすい説明ありがとうございます!インラインは思いつきませんでした。 __forceinline void Func( double, double ) このようなオプションは結果に影響を与えません。 A100 2021.05.20 12:08 #2018 fxsaber:わかりやすい説明ありがとうございます!インラインは考えても みなかったです。このオプションは結果に影響を与えません。 MQLには存在しないようなものなので、今は何の効果もない。 #define inline と、将来的に本当の意味を持つかもしれない。そうでなければ、なぜ導入したのか? Vladimir Simakov 2021.05.20 12:24 #2019 A100:MQLでは、今はもう存在しないようなものなので、影響はない。と、将来的には本当の意味を持つかもしれない。そうでなければ、なぜ導入されたのか? バージョンアップのヘルプを見た限りでは、*.hファイルをインライン化するためのスタブとして導入されたものと記憶しています。 Vladimir Simakov 2021.05.20 12:38 #2020 戻り値が関数の引数として渡される関数の呼び出し順序については,c++規格ではコンパイラに計算順序の要件を課していないため,どのような順序で呼び出してもよい(https://en.cppreference.com/w/cpp/language/eval_order).このアナロジーをmqlにどう適用するかは、開発者次第であり、わざわざ定義する必要もないだろう。 1...195196197198199200201202203204205206207208209...247 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
標準関数は、左から右に引数を受け取ります。
カスタム関数は、右から左へ引数を受け取ります。
結果
これがあるべき姿なのか?
そういうものなのでしょうか?
これは、あてにならないUBです。すなわち、プログラムの論理が引数の評価順序に依存するような事態は明示的に避けなければならない。
通常の関数は、左から右へ引数を受け取ります。
ここで、反論の例を挙げます。
結果:2 1
これは、あてにならないUBです。つまり、プログラムの論理が引数の評価順序に依存するような事態は明示的に避けなければならないのです
ここで、反論の例を挙げます。
カスタム品ではすべてが不安定になることが判明しました。カスタムメイドの場合、最初からすべてが不安定です。
標準のものでは、すべてが不安定であることがわかりました。カスタムメイドのものであれば、最初から曖昧さはありません。
違いは、通常の関数(右から左へ)とインライン関数(順序は不定)があることです。
インライン関数は関数ではなく、アドレスを持つことができません。この観点からすると、通常の関数とカスタム関数の違いはなく、例えば、最も単純なカスタム関数(要するにインライン)の引数が常に右から左に計算される理由は不明である。将来的にインライン関数で順番が変わる可能性は否定できないので
一時期、計算の順番を安全に使うためのインラインキーワードを導入することを提案したことがあります。
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
エラー、バグ、質問
A100, 2017.10.05 14:30
これは、C++のinlineキーワードの有用性を改めて示すものです(ここでは、inlineキーワードは時代遅れという意見もあったようです)。
中でもインラインとは、実際にはプログラマが関数のパラメータの計算順序を使用しないことを意味し、コンパイラがインライン関数をインライン化することを決定した場合、コンパイラは順方向の計算順序をより効率的に使用できる(逆方向の計算順序は明らかに呼び出された関数にのみ効率的である)ことを意味します。
同時に、コンパイラがインラインでない関数を埋め込むことを決定した場合、たとえそれが効率の低下につながるとしても、(プログラマが関数のインライン化を宣言せずにこの順序を仮定したため)評価の(一般的な)逆の順序を使用する必要があります。
インラインは、計算順序を明示的に制御できないMQLでも適切です。
違いは、通常の関数(右から左へ)とインライン関数(順序は不定)があることです。
インライン関数は関数ではなく、アドレスを持つことができません。この観点からすると、通常の関数とカスタム関数の違いはなく、例えば、最も単純なカスタム関数(要するにインライン)の引数が常に右から左に計算される理由は不明である。将来的にインライン関数で順番が変わる可能性は否定できないので
私は一時期、計算順序を安全に使用するためのインラインキーワードの導入を提案したことがあります。
わかりやすい説明ありがとうございます!インラインは思いつきませんでした。
このようなオプションは結果に影響を与えません。
わかりやすい説明ありがとうございます!インラインは考えても みなかったです。
このオプションは結果に影響を与えません。
MQLには存在しないようなものなので、今は何の効果もない。
と、将来的に本当の意味を持つかもしれない。そうでなければ、なぜ導入したのか?
MQLでは、今はもう存在しないようなものなので、影響はない。
と、将来的には本当の意味を持つかもしれない。そうでなければ、なぜ導入されたのか?
バージョンアップのヘルプを見た限りでは、*.hファイルをインライン化するためのスタブとして導入されたものと記憶しています。