MQL5におけるOOPに関する質問 - ページ 89

 
構造体が1つのフィールドを持つ場合は、それで良い。それ以上あっても無意味であり、愚かでさえあります。
 
Dmitry Fedoseev:
構造体が1つのフィールドを持つなら、それでいいのです。それ以上あっても意味がなく、バカバカしいとさえ思います。

単田舎の構造を誰が望むのか?この "仕組み "は、どのように役立っているのでしょうか?

 
Mikhail Dovbakh:

単田舎の構造を誰が望むのか?この「構造化」はどのように役立っているのでしょうか?

配列構造体

MQLはポインターを扱えないが、制約のない構造体は扱えるので、配列を構造体で包む必要がある

 
Igor Makanu:

配列構造体

MQLはポインターを扱えないが、構造体は制限なく扱えるので、配列を構造体にラップする必要がある

クラスで包む方が簡単なのでは?それでも、この構造は、まず、静的なデータリストを扱う場合に有利である。また、動的な構造を扱う場合、後から着地させるのは不便です。

 
Alexandr Andreev:

授業で包んだ方が楽なのでは?構造体は、主に静的なデータのリストを扱うときに有利です。また、動的な構造を扱うと、着地が不便になります。

ではもっと簡単です。

そして、型の掛け算を避けるために、これらの型をクラスの外で部分的に使って、構造体のパブリック部分を記述するクラスを作りました。

通常の構造体として使用することができます。

 
Mikhail Dovbakh:

単田舎の構造を誰が望むのか?この "仕組み "は、どのように役立っているのでしょうか?

あれは...なんだっけ...修辞学的論文)

しかし、時には1つの配列を構造体に入れ、これらの構造体から配列を使用するのが便利な場合があります。

 
問題なく動作しています。ただ、ひとつだけあります。関数から構造体が返される場合,関数内部で生成された構造体ではなく,この構造体のコピー,すなわち暗黙のコピーコンストラクタが起動されます.
 
Vladimir Simakov:
問題なく動作しています。ただ、ひとつだけあります。関数から構造体が返されるとき,それは関数内部で生成された構造体ではなく,この構造体のコピー,つまり暗黙のコピーコンストラクタが起動されています.
不必要なコピーは行わず、スタックに構造体を作成し、そこから必要なフィールドをコピーしています。
 
Aliaksandr Hryshyn:
不必要なコピーは行わず、スタックに構造体を作成し、そこから必要なフィールドをコピーしています。
これは、コンパイラが最適化した場合です。しかし、そうでない場合は、f()を呼び出すと、次のようなことが起こります。スタックの先頭のポインタは構造体のサイズだけシフトされる(ここで結果が返される)。関数コードはスタックに上がります。さらに、実行の過程で構造の宣言に 行き着く。スタックポインタは再びそのサイズにシフトする。この構造にこそ、機能が詰まっているのです。関数が終了する前に、関数内の構造体に割り当てられたメモリは、戻り値に割り当てられたメモリにコピーされます。
 
Vladimir Simakov:
これは、コンパイラが協調して最適化する場合です。そうでない場合は、f()を呼び出すと、次のようになります。スタックノードポインタは構造体のサイズにシフトされる(ここで結果が返されることになる)。関数コードはスタックに上がります。さらに、実行の過程で構造の宣言に 行き着く。スタックポインタは再びそのサイズにシフトする。この構造にこそ、機能が詰まっているのです。関数が終了する前に、関数内の構造体に割り当てられたメモリは、戻り値に割り当てられたメモリにコピーされます。
最も可能性が高いのは、最適化することです。