mql5言語の特徴、微妙なニュアンスとテクニック - ページ 215 1...208209210211212213214215216217218219220221222...247 新しいコメント mktr8591 2021.11.18 17:50 #2141 ところで、配列 static X x[n]; を作成し、X が k-tor を持つ場合、その中のすべての要素フィールドは private でもまずゼロにされ、その後初めて k-tor が呼び出されます。ですから、プライベートフィールドをゼロにすることは、OOPパラダイムに違反するものではありません。 しかし、コンストラクタが動作しなかったのはバグです。 fxsaber 2021.11.18 17:53 #2142 mktr8591 #:ところで、静的配列X x[n]; をオブジェクトとし、Xがk-torを持つ場合、その中の全ての要素フィールドはprivateでもまずゼロにされ、その後初めてk-torが呼ばれる。ですから、プライベートフィールドをゼロにすることは、OOPパラダイムに違反するものではありません。 それは素晴らしいことです。つまり、ゼロ化はコンストラクタの前に来るので、すべてが正しいということがわかりました。ありがとうございました。 fxsaber 2021.11.18 17:54 #2143 Igor Makanu #:MQL5で調べたところ、もっと悪いかもしれない、インジケーターのヒストリーを数TF分汲み上げることもしています。for文でいろいろと書ける ))) for文でvoid-functionの呼び出しに遭遇したことはない。他のバリエーションもよく見かけるようになりました。 Vladimir Simakov 2021.11.18 18:05 #2144 mktr8591 #: 付け加えると、もしクラスが自明でないフィールド(オブジェクト)を持っているなら、そのようなフィールドのためにオブジェクト全体をゼロ・イニットした後、そのデフォルトのc-torが呼び出されることになります。 読んでみてください。 値の初期化の効果は 1)T がデフォルトコンストラクタを 持たないクラス型、またはユーザが提供または削除したデフォルトコンストラクタを 持つ場合、オブジェクトはデフォルトで初期化さ れる。 2) T がユーザ提供でも削除でもないデフォルトコンストラクタを持つクラス型である場合(つまり、暗黙的に定義されたデフォルトコンストラクタやデフォルトされたデフォルトコンストラクタを持つクラスでもよい)、オブジェクトはゼロ初期化 されてデフォルト初期化の意味制約がチェックされ、T に非自明なデフォルトコンストラクタがあればオブジェクトがデフォルト初期化さ れます。 3)T が配列型の場合,配列の各要素は値で初期化さ れる。 4) それ以外の場合、オブジェクトはゼロ初期化さ れる。 default-initializedについてお読みください。 T が(cv で修飾された)非 POD(C++11 まで) クラス型である場合,コンストラクタは空の引数リストに対して過負荷解消が 行われるものと見なされます.選択されたコンストラクタ(デフォルトコンストラクタの 1つ)が呼び出され、新しいオブジェクトの初期値が提供されます。 T が配列型の場合,配列の各要素はデフォルトで初期化される。 そうでない場合は、初期化は行われません:自動保存期間を持つオブジェクト(およびそのサブオブジェクト)は、不定な値を含んでいます。 UB! コンパイラがゼロで初期化しても、今日は初期化、明日は次のアップデート後...と、何の意味もないんです。 mktr8591 2021.11.18 18:15 #2145 Vladimir Simakov #:読んでみてください。値の初期化の効果は1)T がデフォルトコンストラクタを 持たないクラス型、またはユーザが提供または削除したデフォルトコンストラクタを 持つ場合、オブジェクトはデフォルトで初期化さ れる。 2) T がユーザ提供でも削除でもないデフォルトコンストラクタを持つクラス型である場合(つまり、暗黙的に定義されたデフォルトコンストラクタやデフォルトされたデフォルトコンストラクタを持つクラスでもよい)、オブジェクトはゼロ初期化 されてデフォルト初期化の意味制約がチェックされ、T に非自明なデフォルトコンストラクタがあればオブジェクトはデフォルト初期化さ れます。 3)T が配列型の場合,配列の各要素は値で初期化さ れる。 4) それ以外の場合、オブジェクトはゼロ初期化さ れる。 default-initializedについてお読みください。 T が(cv で修飾された)非 POD(C++11 まで) クラス型である場合,コンストラクタは空の引数リストに対して過負荷解消が 行われるものと見なされます.選択されたコンストラクタ(デフォルトコンストラクタの 1つ)が呼び出され、新しいオブジェクトの初期値が提供されます。 T が配列型の場合,配列の各要素はデフォルトで初期化される. そうでない場合は、初期化は行われません:自動保存期間を持つオブジェクト(およびそのサブオブジェクト)は、不定な値を含んでいます。 UB!コンパイラがゼロで初期化することに意味はなく、今日は初期化、明日は次のアップデート後......という具合です。 私の投稿「付け忘れ......」は、前回の投稿の補足として書かれたものです。 トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム mql5言語の特殊性、ヒントとコツ mktr8591, 2021.11.18 18:15 @A100 mqlがC++から生まれたことを思い出せば、これらのクラスにはコンストラクタがない(つまり暗黙のコンストラクタがある)ので、これらの例(の対応)は両方ともそこそこうまく動作します。 ClassX x[n]={}; と宣言すると、配列の各要素に値が初期化 されます。 ClassX にカスタムコンストラクタがない場合(ただし、デフォルトの未設定コンストラクタはある)、クラスオブジェクトのゼロ初期化が行われます - プライベートフィールドがあるかどうかに関係なく、です。 しかし、constフィールドがある場合、デフォルトコンストラクタが暗黙のうちに削除されるため、コンパイラエラーとなります。 C++での例。 #include <iostream> using namespace std; class X { int a; public: int get(){return a;} //X(){} //так массив x не обнуляется //а если нет конструктора - то обнуляется }; int main() { X x[10]={}; for (int i=0; i<10;i++) cout<<x[i].get()<<endl; } したがって、構造体/クラスにconstフィールドがなければ、このロジックは正しいことになります。 それは、あるクラスがユーザーコンストラクタを持たず、削除されない暗黙のコンストラクタがある場合という状況に対処するものでした。この場合、あなたが引用したポイント1は適切ではありません。 ポイント「2) Tがユーザ提供でも削除でもないデフォルトコンストラクタを持つクラス型である場合(つまり、暗黙的に定義されたデフォルトコンストラクタを持つクラスであってもよい)、オブジェクトはゼロ初期化さ れ、デフォルト初期化に関するセマンティック制約がチェックされ、Tが自明でないデフォルトコンストラクタを持つ場合、オブジェクトはデフォルト初期化さ れる;". だから、すべてがうまくいくのです。 Features of the mql5 Vladimir Simakov 2021.11.18 18:17 #2146 Vladimir Simakov #:読んでみてください。値の初期化の効果は1)T がデフォルトコンストラクタを 持たないクラス型、またはユーザが提供または削除したデフォルトコンストラクタを 持つ場合、オブジェクトはデフォルトで初期化さ れる。 2) T がユーザ提供でも削除でもないデフォルトコンストラクタを持つクラス型である場合(つまり、暗黙的に定義されたデフォルトコンストラクタやデフォルトされたデフォルトコンストラクタを持つクラスでもよい)、オブジェクトはゼロ初期化 されてデフォルト初期化の意味制約がチェックされ、T に非自明なデフォルトコンストラクタがあればオブジェクトはデフォルト初期化さ れます。 3)T が配列型の場合,配列の各要素は値で初期化さ れる。 4) それ以外の場合、オブジェクトはゼロ初期化さ れる。 default-initializedについてお読みください。 T が(cv で修飾された)非 POD(C++11 まで) クラス型である場合,コンストラクタは空の引数リストに対して過負荷解消が 行われるものと見なされます.選択されたコンストラクタ(デフォルトコンストラクタの 1つ)が呼び出され、新しいオブジェクトの初期値が提供されます。 T が配列型の場合,配列の各要素はデフォルトで初期化される. そうでない場合は、初期化は行われません:自動保存期間を持つオブジェクト(およびそのサブオブジェクト)は、不定な値を含んでいます。 UB!コンパイラがゼロで初期化しても、今日は初期化、明日は次のアップデート後......と、何の意味もないんです。おっと、読み違えた。この場合2) Tがユーザ提供でも削除でもないデフォルトコンストラクタを持つクラス型 である場合(つまり、暗黙的に定義されたデフォルトコンストラクタを持つクラスであってもよい)、オブジェクトは 次のようになります。ゼロ初期化され、デフォルト初期化に関するセマンティック制約がチェック され、Tが自明でないデフォルトコンストラクタを持つ場合、オブジェクトはデフォルト初期化されます。 mktr8591 2021.11.18 18:18 #2147 fxsaber #:素晴らしい。ゼロにするのはコンストラクタの前であることがわかり、すべてが正しいことがわかりました。ありがとうございました。 念のため - これは静的なものだけです(これはC++のすべてについてです)。ローカル変数の場合、カスタムk-torがあれば、ゼロイングはありません。 Igor Makanu 2021.11.18 18:19 #2148 fxsaber #:for文の中でvoid関数呼び出しは見たことない。その他のバリエーションはごく一般的なものです。 for文の第3パラメータには何でも書けます。実際、for文はif()文の代わりに{......}と書くことができます。 SZZ:のようなマクロも見たことがあります。 do { ..... }while(0) Vladimir Simakov 2021.11.18 18:28 #2149 Igor Makanu #:for文の第3パラメータには何でも書ける。実際、for文はif()文の代わりに{......}と書くことができる。SZZ:のようなマクロも見たことがあります。 セミコロンを取っ払わないと意味がない)) Igor Makanu 2021.11.18 18:34 #2150 Vladimir Simakov #:セミコロンを削除すると、すべての意味が失われます))) そうそう、このマクロの例では、マクロを呼び出すときに;を置くために、私はあまりマクロを使用していない - 練習はありません。 1...208209210211212213214215216217218219220221222...247 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ところで、配列 static X x[n]; を作成し、X が k-tor を持つ場合、その中のすべての要素フィールドは private でもまずゼロにされ、その後初めて k-tor が呼び出されます。ですから、プライベートフィールドをゼロにすることは、OOPパラダイムに違反するものではありません。
しかし、コンストラクタが動作しなかったのはバグです。
ところで、静的配列X x[n]; をオブジェクトとし、Xがk-torを持つ場合、その中の全ての要素フィールドはprivateでもまずゼロにされ、その後初めてk-torが呼ばれる。ですから、プライベートフィールドをゼロにすることは、OOPパラダイムに違反するものではありません。
それは素晴らしいことです。つまり、ゼロ化はコンストラクタの前に来るので、すべてが正しいということがわかりました。ありがとうございました。
MQL5で調べたところ、もっと悪いかもしれない、インジケーターのヒストリーを数TF分汲み上げることもしています。
for文でいろいろと書ける )))
for文でvoid-functionの呼び出しに遭遇したことはない。他のバリエーションもよく見かけるようになりました。
付け加えると、もしクラスが自明でないフィールド(オブジェクト)を持っているなら、そのようなフィールドのためにオブジェクト全体をゼロ・イニットした後、そのデフォルトのc-torが呼び出されることになります。
読んでみてください。
値の初期化の効果は
default-initializedについてお読みください。
UB!
コンパイラがゼロで初期化しても、今日は初期化、明日は次のアップデート後...と、何の意味もないんです。
読んでみてください。
値の初期化の効果は
default-initializedについてお読みください。
UB!
コンパイラがゼロで初期化することに意味はなく、今日は初期化、明日は次のアップデート後......という具合です。
私の投稿「付け忘れ......」は、前回の投稿の補足として書かれたものです。
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
mql5言語の特殊性、ヒントとコツ
mktr8591, 2021.11.18 18:15
@A100
mqlがC++から生まれたことを思い出せば、これらのクラスにはコンストラクタがない(つまり暗黙のコンストラクタがある)ので、これらの例(の対応)は両方ともそこそこうまく動作します。
C++での例。
したがって、構造体/クラスにconstフィールドがなければ、このロジックは正しいことになります。
それは、あるクラスがユーザーコンストラクタを持たず、削除されない暗黙のコンストラクタがある場合という状況に対処するものでした。この場合、あなたが引用したポイント1は適切ではありません。
ポイント「2) Tがユーザ提供でも削除でもないデフォルトコンストラクタを持つクラス型である場合(つまり、暗黙的に定義されたデフォルトコンストラクタを持つクラスであってもよい)、オブジェクトはゼロ初期化さ れ、デフォルト初期化に関するセマンティック制約がチェックされ、Tが自明でないデフォルトコンストラクタを持つ場合、オブジェクトはデフォルト初期化さ れる;".
だから、すべてがうまくいくのです。
読んでみてください。
値の初期化の効果は
default-initializedについてお読みください。
UB!
コンパイラがゼロで初期化しても、今日は初期化、明日は次のアップデート後......と、何の意味もないんです。
おっと、読み違えた。この場合
2) Tがユーザ提供でも削除でもないデフォルトコンストラクタを持つクラス型 である場合(つまり、暗黙的に定義されたデフォルトコンストラクタを持つクラスであってもよい)、オブジェクトは 次のようになります。ゼロ初期化され、デフォルト初期化に関するセマンティック制約がチェック され、Tが自明でないデフォルトコンストラクタを持つ場合、オブジェクトはデフォルト初期化されます。素晴らしい。ゼロにするのはコンストラクタの前であることがわかり、すべてが正しいことがわかりました。ありがとうございました。
for文の中でvoid関数呼び出しは見たことない。その他のバリエーションはごく一般的なものです。
for文の第3パラメータには何でも書けます。実際、for文はif()文の代わりに{......}と書くことができます。
SZZ:のようなマクロも見たことがあります。
for文の第3パラメータには何でも書ける。実際、for文はif()文の代わりに{......}と書くことができる。
SZZ:のようなマクロも見たことがあります。
セミコロンを取っ払わないと意味がない))
セミコロンを削除すると、すべての意味が失われます)))
そうそう、このマクロの例では、マクロを呼び出すときに;を置くために、私はあまりマクロを使用していない - 練習はありません。