Caractéristiques du langage mql5, subtilités et techniques - page 215
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
À propos, si vous avez pour objet un tableau statique X x[n] ; et que X a un k-tor, alors tous les champs d'éléments dans ce tableau seront d'abord mis à zéro, même les champs privés, et seulement ensuite le k-tor sera appelé. Il n'y a donc aucune violation du paradigme de la POO dans la mise à zéro des champs privés.
Mais le fait que le constructeur ne fonctionne pas est un bug.
À propos, si nous créons un tableau static X x[n] ; et que X a un k-tor, alors tous les champs d'éléments dans ce tableau sont d'abord mis à zéro, même les champs privés, et seulement ensuite le k-tor est appelé. Il n'y a donc aucune violation du paradigme de la POO dans la mise à zéro des champs privés.
C'est génial. Il s'avère donc que la mise à zéro intervient AVANT le constructeur, et que tout est donc correct. Merci !
J'ai regardé mes recherches dans MQL5, ça pourrait être pire, j'ai même gonflé l'historique dans l'indicateur de plusieurs TF :
Je peux écrire beaucoup de choses dans une instruction for )))).
Je n'ai jamais rencontré d'appel à une fonction vide dans une déclaration for. J'ai vu d'autres variantes assez souvent.
J'ai oublié d'ajouter que si une classe a des champs (objets) non triviaux, alors après l'initialisation de l'ensemble de l'objet pour ces champs, leur c-tor par défaut sera appelé.
Lisez :
Les effets de l'initialisation des valeurs sont :
Lisez à propos de default-initialized :
UB !
Le fait que le compilateur vous initialise avec des zéros, ne signifie rien, aujourd'hui il initialise, et demain, après la prochaine mise à jour.....
Lisez :
Les effets de l'initialisation des valeurs sont :
Lisez à propos de default-initialized :
UB !
Le fait que le compilateur vous initialise avec des zéros ne signifie rien, aujourd'hui il initialise, et demain, après la prochaine mise à jour.....
Mon billet "Oublié d'ajouter...." a été rédigé en complément du billet précédent :
Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading
Particularités du langage mql5, trucs et astuces
mktr8591, 2021.11.18 18:15
@A100
Si vous vous souvenez que mql a été créé à partir du C++, ces deux exemples (leurs homologues) fonctionnent bien là-bas car il n'y a pas de constructeurs dans ces classes (c'est-à-dire qu'il y a un constructeur implicite) :
Exemple en C++ :
Donc, s'il n'y a pas de champs constants dans la structure/classe, la logique est correcte.
Il traitait d'une certaine situation - lorsqu'une classe n'a pas de constructeur utilisateur et qu'il existe un constructeur implicite qui n'est pas supprimé. Dans ce cas, le point 1 cité par vous n'est pas approprié.
Point"2) si T est un type de classe avec un constructeur par défaut qui n'est ni fourni par l'utilisateur ni supprimé (c'est-à-dire qu'il peut s'agir d'une classe avec un constructeur par défaut défini implicitement ou par défaut), l'objet estzéro initialisé et les contraintes sémantiques pour l'initialisation par défaut sont vérifiées, et si T a un constructeur par défaut non trivial, l'objet estinitialisé par défaut;".
Donc tout s'emboîte.
Lisez :
Les effets de l'initialisation des valeurs sont :
Lisez à propos de default-initialized :
UB !
Le fait que le compilateur vous initialise avec des zéros, ne signifie rien, aujourd'hui il initialise, et demain, après la prochaine mise à jour.....
Oups. Je l'ai mal lu. Dans ce cas :
2) si Test un type de classe avec un constructeur par défaut qui n'est ni fourni par l'utilisateur ni supprimé (c'est-à-dire qu'il peut s'agir d'une classe avec un constructeur par défaut défini implicitement ou par défaut), l'objet estzéro initialiséet les contraintes sémantiques pour l'initialisation par défaut sont vérifiées, et si Ta un constructeur par défaut non trivial, l'objet estinitialisé par défaut;Super. Il s'avère que la mise à zéro intervient AVANT le constructeur, donc tout est correct. Merci !
Je n'ai pas vu d'appel de fonction void dans une instruction for. Les autres variantes sont assez courantes.
Vous pouvez écrire ce que vous voulez dans le 3ème paramètre de l'instruction for, en fait, l'instruction for peut remplacer l'instruction if() avec {.....}.
SZZ : J'ai aussi vu des macros comme
Vous pouvez écrire ce que vous voulez dans le troisième paramètre de l'instruction for, en fait, l'instruction for peut remplacer l'instruction if() avec {.....}.
SZZ : J'ai aussi vu des macros comme
Enlevez le point-virgule, sinon tout le propos est perdu)))
Enlevez le point-virgule, sinon toute signification est perdue)))).
ouais, c'est vrai - cet exemple dans les macros pour mettre ; quand on appelle une macro, je n'utilise pas beaucoup les macros - pas de pratique