Fragen zu OOP in MQL5 - Seite 89

 
Wenn die Struktur nur ein Feld hat, ist das in Ordnung. Wenn es mehr gibt, ist es sinnlos und sogar albern.
 
Dmitry Fedoseev:
Wenn die Struktur nur ein Feld hat, ist das in Ordnung. Wenn es mehr gibt, ist es sinnlos und sogar dumm.

Wer würde eine Ein-Feld-Struktur wollen? Wie kann diese "Struktur" helfen?

 
Mikhail Dovbakh:

Wer würde eine Ein-Feld-Struktur wollen? Wie kann diese "Strukturierung" helfen?

Strukturumhüllung über ein Array

MQL kann nicht mit Zeigern umgehen, aber es kann mit Strukturen ohne Einschränkungen umgehen, also müssen Sie ein Array in eine Struktur einpacken

 
Igor Makanu:

Strukturumhüllung über ein Array

MQL kann nicht mit Zeigern umgehen, aber es kann ohne Einschränkungen mit Strukturen umgehen, also müssen wir ein Array in eine Struktur einpacken

Wäre es nicht einfacher, sie in eine Klasse zu verpacken? Dennoch ist die Struktur in erster Linie ein Vorteil bei der Arbeit mit einer statischen Datenliste. Wenn man mit einer dynamischen Struktur arbeitet, ist es außerdem nicht so einfach, sie später zu landen.

 
Alexandr Andreev:

Wäre es nicht einfacher, das Ganze in einer Klasse zu verpacken? Eine Struktur ist vor allem dann von Vorteil, wenn man mit einer statischen Liste von Daten arbeitet. Und wenn man mit einer dynamischen Struktur arbeitet, ist es nicht einfach, sie zu landen.

Einfacher ist es bei

Und um die Vervielfältigung von Typen zu vermeiden, habe ich eine Klasse erstellt, die den öffentlichen Teil der Struktur beschreibt und diese Typen teilweise außerhalb der Klasse verwendet,

sie als normale Strukturen verwenden, nur mehr Doppelpunkte, aber das stört mich nicht

 
Mikhail Dovbakh:

Wer würde eine Ein-Feld-Struktur wollen? Wie kann diese "Struktur" helfen?

Das war ein... wie heißt er doch gleich... rhetorische These))

Manchmal kann es jedoch sinnvoll sein, ein Array in eine Struktur zu legen und dann ein Array aus diesen Strukturen zu verwenden.

 
Es funktioniert gut. Es gibt nur eine Sache. Wenn die Struktur von der Funktion zurückgegeben wird, ist es nicht die innerhalb der Funktion erstellte Struktur, die zurückgegeben wird, sondern eine Kopie dieser Struktur, d.h. es wird ein impliziter Kopierkonstruktor gestartet.
 
Vladimir Simakov:
Es funktioniert gut. Es gibt nur eine Sache. Wenn die Struktur von der Funktion zurückgegeben wird, handelt es sich nicht um die in der Funktion erstellte Struktur, sondern um eine Kopie dieser Struktur, d. h. der implizite Kopierkonstruktor wird gestartet.
Es gibt kein unnötiges Kopieren, die Struktur wird im Stapel angelegt und das benötigte Feld wird daraus kopiert.
 
Aliaksandr Hryshyn:
Es gibt kein unnötiges Kopieren, die Struktur wird im Stapel angelegt und das benötigte Feld wird daraus kopiert.
Dies ist der Fall, wenn der Compiler sie optimiert. Andernfalls wird beim Aufruf von f() Folgendes passieren. Der Zeiger an der Spitze des Stacks wird um die Größe der Struktur verschoben (das Ergebnis wird hier zurückgegeben). Der Funktionscode wird auf dem Stapel abgelegt. Im weiteren Verlauf der Ausführung gelangen wir zur Deklaration der Struktur. Der Stapelzeiger verschiebt sich wieder auf seine Größe. Es ist diese Struktur, die mit der Funktion gefüllt wird. Bevor die Funktion beendet wird, wird der für die Struktur in der Funktion reservierte Speicher in den für die Rückgabe reservierten Speicher kopiert.
 
Vladimir Simakov:
Dies ist der Fall, wenn der Compiler co-optimiert. Andernfalls wird beim Aufruf von f() Folgendes passieren. Der Zeiger auf den Stapelknoten wird auf die Größe der Struktur verschoben (an diese Stelle wird das Ergebnis zurückgegeben). Der Funktionscode wird auf dem Stapel abgelegt. Im weiteren Verlauf der Ausführung gelangen wir zur Deklaration der Struktur. Der Stapelzeiger verschiebt sich wieder auf seine Größe. Es ist diese Struktur, die mit der Funktion gefüllt wird. Bevor die Funktion beendet wird, wird der für die Struktur in der Funktion reservierte Speicher in den für die Rückkehr reservierten Speicher kopiert.
Höchstwahrscheinlich wird sie optimiert.