Questions sur la POO dans MQL5 - page 89

 
Si la structure ne comporte qu'un seul champ, c'est parfait. S'il y a plus, c'est inutile et même stupide.
 
Dmitry Fedoseev:
Si la structure ne comporte qu'un seul champ, c'est parfait. S'il y a plus, cela n'a pas de sens et est même stupide.

Qui voudrait d'une structure à champ unique ? En quoi cette "structure" est-elle utile ?

 
Mikhail Dovbakh:

Qui voudrait d'une structure à champ unique ? En quoi cette "structuration" est-elle utile ?

enveloppe de structure sur un tableau

MQL ne peut pas gérer les pointeurs, mais il peut gérer les structures sans contraintes, donc vous devez envelopper un tableau dans une structure.

 
Igor Makanu:

enveloppe de structure sur un tableau

MQL ne peut pas gérer les pointeurs, mais il peut gérer les structures sans aucune limitation, donc nous devons envelopper un tableau dans une structure

Ne serait-il pas plus simple de l'intégrer dans une classe ? Pourtant, cette structure est, avant tout, un avantage lorsqu'on travaille avec une liste de données statiques. De plus, lorsqu'on travaille avec une structure dynamique, il n'est pas pratique de la faire atterrir plus tard.

 
Alexandr Andreev:

Ne serait-il pas plus simple de l'emballer dans un cours ? Une structure est surtout un avantage lorsqu'on travaille avec une liste statique de données. Et quand on travaille avec une structure dynamique, il n'est pas commode de la faire atterrir.

c'est plus simple à

Et pour éviter la multiplication des types, j'ai fait une classe qui décrit la section publique de la structure, en utilisant partiellement ces types en dehors de la classe,

les utiliser comme des structures normales, la seule chose est plus de deux-points, mais je ne dirai pas que cela me dérange

 
Mikhail Dovbakh:

Qui voudrait d'une structure à champ unique ? En quoi cette "structure" est-elle utile ?

C'était un... quel est son nom... thèse rhétorique))

Cependant, il peut parfois être utile de placer un tableau dans une structure, puis d'utiliser un tableau à partir de ces structures.

 
Cela fonctionne bien. Il y a juste une chose. Lorsque la structure est retournée par la fonction, ce n'est pas la structure créée à l'intérieur de la fonction qui est retournée, mais une copie de cette structure, c'est-à-dire qu'un constructeur de copie implicite est lancé.
 
Vladimir Simakov:
Cela fonctionne bien. Il y a juste une chose. Lorsque la structure est retournée par la fonction, ce n'est pas la structure créée à l'intérieur de la fonction, mais une copie de cette structure, c'est-à-dire que le constructeur de copie implicite est lancé.
Il n'y a pas de copie inutile, la structure est créée dans la pile et le champ requis est copié à partir de celle-ci.
 
Aliaksandr Hryshyn:
Il n'y a pas de copie inutile, la structure est créée dans la pile et le champ requis est copié à partir de celle-ci.
C'est si le compilateur l'optimise. Mais sinon, en appelant f(), la chose suivante se produira. Le pointeur au sommet de la pile est décalé de la taille de la structure (le résultat sera retourné ici). Le code de la fonction monte sur la pile. En outre, au cours du processus d'exécution, nous arrivons à la déclaration de la structure. Le pointeur de la pile se déplace à nouveau vers sa taille. C'est cette structure qui est remplie de la fonction. Avant la sortie de la fonction, la mémoire allouée à la structure de la fonction est copiée dans la mémoire allouée au retour.
 
Vladimir Simakov:
C'est si le compilateur co-optimise. Sinon, lorsque f() est appelé, il se passe ce qui suit. Le pointeur de nœud de pile est décalé à la taille de la structure (c'est là que le résultat sera renvoyé). Le code de la fonction monte sur la pile. En outre, au cours du processus d'exécution, nous arrivons à la déclaration de la structure. Le pointeur de la pile se déplace à nouveau vers sa taille. C'est cette structure qui est remplie de la fonction. Avant la sortie de la fonction, la mémoire allouée à la structure de la fonction est copiée dans la mémoire allouée au retour.
Plus probablement, il l'optimise.