MQL5 Le compilateur ne fait pas la distinction entre une classe et un pointeur vers celle-ci - page 10

 
Ilya Malev:

Et combien de temps s'est écoulé avant que ces opérations ne soient réellement introduites... Seul le vent le sait probablement. Mais oui, des choses assez importantes peuvent être soulevées sur le forum pendant des années sans grand succès.

Si vous n'avez pas peur de faire défiler les pages vers l'avant, vous pouvez tout voir :

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Bugs, bugs, questions

Ilyas, 2015.09.03 14:30


Ajout des opérateurs *(Dereference/Inderection) et &(Address-of), aucun changement linguistique supplémentaire ne sera effectué/prévu.
A *a,*b;

 a== b;   // сравнение "указателей"
*a== b;   // вызов оператора ==(A *)
 a==*b;   // вызов оператора ==(A &)

// для операции != аналогично

// операция & - эквивалент(короткая запись) вызову GetPointer

 
Alexey Navoykov:

Eh bien, si vous n'êtes pas paresseux et que vous faites défiler un peu vers l'avant, vous pouvez tout voir :

Si vous faites défiler plus bas, vous trouverez ceci :

Ilyas:
Ajouté aux deux langues. Mais malheureusement, il ne sera pas intégré dans la prochaine version.

En général, il est clair qu'ils ont été ajoutés il y a environ trois ans, très probablement... Mais où sont les nouvelles, où est la documentation, l'aide, pourquoi n'y a-t-il qu'une mention de & et pas de *, s'ils ont été ajoutés en même temps ? Si l'on en juge par le fait que & est dans la documentation et que * ne l'est pas, on peut supposer que c'est * qui a été abandonné pour une raison quelconque juste avant la sortie de la version et finalement ajouté plus tard. Pour en avoir le cœur net, il faut soit trouver un article de presse sur la version où cela a été ajouté, soit demander aux administrateurs eux-mêmes.

 
Je peux donner aux curieux les builds 1047, 1085, 1210 et 1224 (vers cette époque) pour expérimentation ;)

 
Andrey Khatimlianskii:
Je peux vous donner les constructions 1047, 1085, 1210 et 1224 (de cette époque) pour l'expérimentation ;)

Vous pouvez me le donner. Mon email est dans mon profil.

 
Ilya Malev:

Vous pouvez me le donner. Mon adresse électronique est dans mon profil.

Peut-être que quelqu'un d'autre l'aimerait.

 
Oui, c'est un sujet vraiment hivernal ;))
 
Le 47 ne fonctionne pas pour moi.
85 (MT4 13.02.15) * ne fonctionne pas
1210 (MT5 30.10.15) * ne fonctionne pas
1224 (MT5 16.12.15) * ne fonctionne pas (c'est 3 en orthographe trois mois après ce post du fil de questions)

Au même moment, le & en 1224 se compile en "hourra". Ce qui prouve mon hypothèse que seul & et non * a été ajouté alors

 

C'est-à-dire qu'à l'origine, les pointeurs ont été ajoutés à MQL sans possibilité de les déréférencer dans le code. Il s'agit d'une approche intéressante.

Reste-t-il à terminer l'arithmétique des pointeurs ou est-ce déjà possible ?

class A
{
public:

    int iValue;
};
//......................
A m_A[5];

void OnStart()
{
A* pA;

    for(int c =0; c < 5; c++)
    {
        pA = &m_A[c]; 
        
        (*pA).iValue =c;
        printf("A[%i].iValue: %i", c, m_A[c].iValue);
        // pA++
    }
}
 
SemenTalonov:
(* pA).iValue =c;

Celui-là : (* ) n'est pas nécessaire ici

* n'est nécessaire dans µl que lorsque les opérations =, ==, !=, !, && ou || sont appliquées directement au * pointeur.
 
Ilya Malev:
Le & en 1224, par contre, compile avec brio. Ce qui prouve mon hypothèse que seul & et non * a été ajouté à cette époque.

D'ailleurs, il se pourrait bien que, puisque tous les canaux officiels (forum, aide, documentation) gardent le silence sur l'opérateur *, les administrateurs pensent peut-être à le supprimer à nouveau et à faire comme s'il n'avait jamais existé)). Il est donc dangereux de compter sur son utilisation pour le moment, je pense.

Raison: