Caractéristiques du langage mql5, subtilités et techniques - page 161
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
2020.01.27 01:15:57.859 tst (EURUSD,H1) (null) , 0.000000 , 0
Si je supprime la conversion de type, l'expression 'NULL' du type 'void' est illégale.
intéressant, il s'avère que la chaîne nput peut être initialisée void
NULL est une initialisation. L'exemple montre volontairement une chaîne de caractères qui n'a pas été saisie.
NULL / NIL (en d'autres termes) ne peut pas être une initialisation d'une entité de type chaîne constante.
Au moins parce que la chaîne mql n'est pas un "pointeur" comme en C. Il n'a pas d'état spécial "rien du tout".
PS (oh, je ne m'attendais pas à cela de ma part)
Elle n'a pas d'état spécial de "rien du tout".
Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading
Particularités de mql5, trucs et astuces
fxsaber, 2020.01.26 15:54
J'utilise cet état tous les jours.
au moins parce qu'une chaîne mql n'est pas un "pointeur" comme en C. Il n'a pas d'état spécial "rien du tout".
PS (oh, je ne m'attendais pas à ça de ma part).
hélas non, une chaîne en MQL est une entité avec de la mémoire allouée.@Ilyas a expliqué pourquoi StringBufferLen() peut ne pas montrer la longueur de la chaîne, mais montre la mémoire utilisée pour stocker la chaîne.
J'utilise cet état tous les jours.
Ce n'est pas un indicateur du tout, dans MQL4 je désinsère les pointeurs de n'importe quel objet en utilisant StringConcatenate(), c'est-à-dire que le travail des fonctions intégrées n'est pas implémenté par les règles de MQL ;)))
Dans MQL4, j'annule les pointeurs vers n'importe quel objet en utilisant StringConcatenate(), c'est-à-dire que les fonctions intégrées ne sont pas implémentées par les règles MQL ;)))
Ça ne fait aucune différence ce qu'il y a à l'intérieur.
Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie
Particularités de mql5, trucs et astuces
Igor Makanu, 2020.01.26 22:27
La façon dont elle est à l'intérieur ne fait aucune différence.
complété mon post par votre exemple
J'ai également fait quelques expériences supplémentaires avec la chaîne d'entrée s = NULL ;
d'après ce que j'ai compris, tant que nous n'essayons pas d'utiliser la valeur de la variable d'entrée - elle sera NULL, mais au moment où nous essayons d'attribuer une valeur à une autre variable ou simplement de la désactiver, NULL disparaîtra, c'est-à-dire que de la mémoire sera allouée à cette variable d'entrée
si j'ai bien compris, tant que nous n'essayons pas d'utiliser la valeur d'une variable d'entrée - cette valeur est NULL, mais à ce moment-là, si nous essayons d'affecter la valeur de cette variable d'entrée à une autre variable ou simplement d'annuler cette variable d'entrée, alors ce NULL disparaîtra, c'est-à-dire que de la mémoire sera allouée à cette variable d'entrée
Le mécanisme de fonctionnement de la variable d'entrée a été décrit en détail ci-dessus.
Ce qu'il y a à l'intérieur ne fait aucune différence.
il y a (encore) une spécificité du déréférencement des entités (il n'y a pas de pointeurs dans mql, ce n'est pas du C, laissez les entités exister)
input est une constante déclarée au démarrage. Vous ne pouvez pas physiquement lui donner la valeur "NULL".
const string nothing=NULL; /// <--- ЭТО ЧТО ?
Oui, ce comportement est probablement juste "infaillible".
Apparemment, parce que la variable d'entrée doit être initialisée, le= NULL est artificiellement assimilé à ="", alors que la variable occupe déjà au moins un octet en mémoire.
Dans MQL5, les entrées :
sont absolument identiques. Aucune mémoire n'est allouée pour la variable. En tout cas, je n'ai pas trouvé de différences.
En java, par exemple, ces enregistrements sont légèrement différents, malgré le fait qu'aucune mémoire n'est allouée à la variable dans les deux cas également. La première variante (String str = null ;) sera considérée comme initialisée, bien qu'aucune mémoire ne soit allouée pour la variable et que la variable puisse être imprimée comme vide. Dans le second cas (String str ;), lorsque vous essayez d'imprimer la variable, une erreur de variable non initialisée sera générée.
C'est-à-dire que MQL5 est plus tolérant à cet égard.
Lequel est le mieux, je ne le sais même pas.
Comment la mémoire n'est-elle pas allouée à une variable ?
La mémoire est allouée et la variable contient des déchets arbitraires.
Et du fait que la chaîne ne sort aucune valeur, il est logique que le tampon soit vide.
Comment la mémoire n'est-elle pas allouée à une variable ?
La mémoire est allouée, mais la variable ne contient pas de déchets arbitraires.
Et du fait que la chaîne ne sort aucune valeur, il est logique que le tampon soit vide.