MQL5 Der Compiler unterscheidet nicht zwischen einer Klasse und einem Zeiger auf sie - Seite 10

 
Ilya Malev:

Und wie viel mehr Zeit verging, bis diese Maßnahmen tatsächlich eingeführt wurden... Das weiß wahrscheinlich nur der Wind. Aber ja, ziemlich wichtige Dinge können jahrelang im Forum angesprochen werden, ohne viel Erfolg.

Wenn Sie nicht zu faul sind und vorwärts scrollen, können Sie alles sehen:

Forum zum Thema Handel, automatische Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

Ilyas, 2015.09.03 14:30


Operatoren *(Dereferenzierung/Inderektion) und &(Adresse-von) hinzugefügt, keine weiteren Sprachänderungen werden vorgenommen/geplant
A *a,*b;

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

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

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

 
Alexey Navoykov:

Nun, wenn Sie nicht zu faul sind und ein wenig vorwärts scrollen, können Sie alles sehen:

Wenn Sie weiter nach unten scrollen, werden Sie dies finden:

Ilyas:
Zu beiden Sprachen hinzugefügt. Aber leider wird sie es nicht in die nächste Version schaffen.

Im Allgemeinen ist es klar, dass sie wahrscheinlich vor etwa drei Jahren hinzugefügt wurden... Aber wo ist die Neuigkeit, wo ist die Dokumentation, die Hilfe, warum gibt es nur eine Erwähnung von & Operator und kein *, wenn sie zur gleichen Zeit hinzugefügt wurden? Nach der Tatsache zu urteilen, dass & in der Dokumentation steht und * nicht, können wir davon ausgehen, dass es * war, das aus irgendeinem Grund kurz vor der Veröffentlichung aufgegeben wurde und erst später hinzugefügt wurde. Um dies mit Sicherheit herauszufinden, müssen Sie entweder einen News-Post über den Build finden, in dem dies hinzugefügt wurde, oder die Admins selbst fragen.

 
Ich kann den Neugierigen die Builds 1047, 1085, 1210 und 1224 (um diese Zeit) zum Experimentieren geben ;)

 
Andrey Khatimlianskii:
Ich kann Ihnen die Builds 1047, 1085, 1210 und 1224 (aus dieser Zeit) zum Experimentieren geben ;)

Sie können es mir geben. Meine E-Mail-Adresse steht in meinem Profil.

 
Ilya Malev:

Sie können es mir geben. Meine E-Mail-Adresse steht in meinem Profil.

Vielleicht gefällt sie jajemand anderem.

 
Ja, es ist ein wirklich winterliches Thema ))
 
47 läuft nicht für mich.
85 (MT4 13.02.15) * Funktioniert nicht
1210 (MT5 30.10.15) * Funktioniert nicht
1224 (MT5 16.12.15) * funktioniert nicht (d.h. 3 buchstabiert drei Monate nach diesem Frage-Thread-Post)

Gleichzeitig wird das & im Jahr 1224 zu "Hurra" kompiliert. Was meine Hypothese bestätigt, dass damals nur & hinzugefügt wurde, nicht aber *

 

Das heißt, ursprünglich wurden Zeiger zu MQL hinzugefügt, ohne die Möglichkeit, sie im Code zu dereferenzieren. Dies ist ein interessanter Ansatz.

Muss die Zeigerarithmetik noch fertiggestellt werden oder ist das irgendwie schon möglich?

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;

Diese hier: (* ) ist hier nicht erforderlich

* wird in µl nur benötigt, wenn die Operationen =, ==, !=, !, && oder || direkt auf den * Zeiger angewendet werden
 
Ilya Malev:
Die & im Jahr 1224, auf der anderen Seite, kompiliert mit Bravour. Dies beweist meine Hypothese, dass nur & und nicht * zu dieser Zeit hinzugefügt wurden.

Übrigens kann es gut sein, dass die Admins, da alle offiziellen Kanäle (Forum, Hilfe, Dokumentation) den Operator * verschweigen, darüber nachdenken, ihn wieder zu entfernen und so zu tun, als hätte es ihn nie gegeben))) Es ist also gefährlich, sich derzeit auf seine Verwendung zu verlassen.