Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 215
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Übrigens, wenn wir ein statisches Array X x[n] erstellen und X einen k-Tor hat, dann werden alle Elementfelder darin zuerst auf Null gesetzt, auch die privaten, und erst dann wird der k-Tor aufgerufen. Es ist also kein Verstoß gegen das OOP-Paradigma, private Felder auf Null zu setzen.
Aber die Tatsache, dass der Konstruktor nicht funktioniert hat, ist ein Fehler.
Übrigens, wenn Sie ein statisches Array X x[n] objektieren; und X hat einen k-tor, dann werden alle Elementfelder darin zuerst auf Null gesetzt, auch private, und erst dann wird der k-tor aufgerufen. Es ist also kein Verstoß gegen das OOP-Paradigma, private Felder auf Null zu setzen.
Das ist großartig. Es stellt sich also heraus, dass die Nullstellung VOR dem Konstruktor erfolgt und somit alles korrekt ist. Ich danke Ihnen!
Ich habe mir meine Forschung in MQL5 angesehen, es könnte schlimmer sein, ich pumpe sogar die Geschichte im Indikator um mehrere TFs auf:
Ich kann eine Menge Dinge in eine for-Anweisung schreiben ))))
Mir ist noch nie ein Aufruf einer ungültigen Funktion in einer for-Anweisung begegnet. Ich habe schon oft andere Varianten gesehen.
Ich vergaß hinzuzufügen, wenn eine Klasse nicht-triviale Felder (Objekte) hat, dann wird nach dem Zero-Init des gesamten Objekts für solche Felder ihr Standard-C-Tor aufgerufen.
Lesen:
Die Auswirkungen der Wertinitialisierung sind:
Lesen Sie über default-initialized:
UB!
Die Tatsache, dass der Compiler Sie mit Nullen initialisiert, hat nichts zu bedeuten, heute initialisiert er, und morgen, nach dem nächsten Update....
Lesen:
Die Auswirkungen der Wertinitialisierung sind:
Lesen Sie über default-initialized:
UB!
Die Tatsache, dass der Compiler Sie mit Nullen initialisiert, hat nichts zu bedeuten, heute initialisiert er, und morgen, nach dem nächsten Update....
Mein Beitrag "Vergessen zu addieren...." wurde als Ergänzung zum vorherigen Beitrag geschrieben:
Forum zum Thema Handel, automatische Handelssysteme und Testen von Handelsstrategien
Eigenheiten der Sprache mql5, Tipps und Tricks
mktr8591, 2021.11.18 18:15
@A100
Wenn Sie sich daran erinnern, dass mql aus C++ hervorgegangen ist, funktionieren diese beiden Beispiele (ihre Gegenstücke) gut, weil es in diesen Klassen keine Konstruktoren gibt (d.h. es gibt einen impliziten Konstruktor):
Beispiel in C++:
Wenn also keine Konstantenfelder in der Struktur/Klasse vorhanden sind, ist die Logik korrekt.
Es wurde eine bestimmte Situation berücksichtigt - wenn eine Klasse keine Benutzerkonstruktoren hat und es einen impliziten Konstruktor gibt, der nicht gelöscht wird. In diesem Fall ist der von Ihnen zitierte Punkt 1 nicht angemessen.
Punkt"2) Wenn T ein Klassentyp mit einem Standardkonstruktor ist, der weder vom Benutzer bereitgestellt noch gelöscht wird (d. h. es kann sich um eine Klasse mit einem implizit definierten oder vorgegebenen Standardkonstruktor handeln), ist das Objektnull-initialisiert und die semantischen Einschränkungen für die Standard-Initialisierung werden überprüft, und wenn T einen nicht-trivialen Standard-Konstruktor hat, ist das Objektstandard-initialisiert;".
Es passt also alles zusammen.
Lesen:
Die Auswirkungen der Wertinitialisierung sind:
Lesen Sie über default-initialized:
UB!
Die Tatsache, dass der Compiler Sie mit Nullen initialisiert, hat nichts zu bedeuten, heute initialisiert er, und morgen, nach dem nächsten Update....
Ups, falsch gelesen. In diesem Fall:
2) Wenn Tein Klassentyp mit einem Standardkonstruktor ist, der weder vom Benutzer bereitgestellt noch gelöscht wird (d. h. es kann sich um eine Klasse mit einem implizit definierten oder vorgegebenen Standardkonstruktor handeln), istdas Objektnull-initialisiertund die semantischen Einschränkungen für die Standard-Initialisierung werden überprüft, und wenn Teinen nicht-trivialen Standard-Konstruktor hat, istdas Objektstandard-initialisiert;Großartig. Es stellt sich heraus, dass die Nullstellung VOR dem Konstruktor kommt, also ist alles korrekt. Ich danke Ihnen!
Ich habe noch keinen Aufruf einer ungültigen Funktion in einer for-Anweisung gesehen. Die anderen Varianten sind recht häufig.
Sie können in den 3. Parameter der for-Anweisung schreiben, was Sie wollen. Tatsächlich kann die for-Anweisung die if()-Anweisung durch {.....} ersetzen.
SZZ: Ich habe auch Makros gesehen wie
Sie können in den 3. Parameter der for-Anweisung schreiben, was Sie wollen, die for-Anweisung kann sogar die if()-Anweisung durch {.....} ersetzen.
SZZ: Ich habe auch Makros gesehen wie
Nehmen Sie das Semikolon weg, sonst geht der ganze Sinn verloren)))
Entfernen Sie das Semikolon, da sonst alle Bedeutung verloren geht))))
ja, richtig - dieses Beispiel in Makros zu setzen ; beim Aufruf eines Makros, ich weiß nicht verwenden Makros viel - keine Praxis