MQL5 Il compilatore non distingue tra una classe e un puntatore ad essa - pagina 10

 
Ilya Malev:

E quanto tempo ancora è passato prima che queste operazioni fossero effettivamente introdotte... Solo il vento probabilmente lo sa. Ma sì, cose piuttosto importanti possono essere portate sul forum per anni senza molto successo

Se non ti dispiace scorrere in avanti puoi vedere tutto:

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Bug, bug, domande

Ilyas, 2015.09.03 14:30


Aggiunti gli operatori *(Dereference/Inderection) e &(Address-of), non sono previste ulteriori modifiche alla lingua
A *a,*b;

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

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

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

 
Alexey Navoykov:

Beh, se non siete pigri e scorrete un po'in avanti, potete vedere tutto:

Se scorrete più in basso, troverete questo:

Ilyas:
Aggiunto a entrambe le lingue. Ma sfortunatamente, non ce la farà nella prossima build.

In generale, è chiaro che circa tre anni fa, molto probabilmente, sono stati aggiunti... Ma dov'è la notizia, dov'è la documentazione, l'aiuto, perché solo l'operatore & è menzionato e * no, se sono stati aggiunti nello stesso momento? A giudicare dal fatto che & è nella documentazione e * non lo è, possiamo supporre che era * che è stato abbandonato per qualche ragione proprio prima del rilascio e infine aggiunto più tardi. Per scoprirlo con certezza, è necessario trovare un post di notizie sulla build in cui questo è stato aggiunto, o chiedere agli stessi amministratori.

 
Posso dare ai curiosi le build 1047, 1085, 1210 e 1224 (intorno a quel periodo) per la sperimentazione ;)

 
Andrey Khatimlianskii:
Posso darvi le build 1047, 1085, 1210 e 1224 (di circa quel periodo) per la sperimentazione ;)

Puoi darlo a me. La mia email è nel mio profilo.

 
Ilya Malev:

Puoi darlo a me. Il mio indirizzo email è nel mio profilo.

Forse a qualcun altro piacerebbe.

 
Sì, è un vero argomento invernale ))
 
Il 47 non corre per me.
85 (MT4 13.02.15) * non funziona
1210 (MT5 30.10.15) * non funziona
1224 (MT5 16.12.15) * non funziona (che è 3 in ortografia tre mesi dopo quel post dal thread domanda)

Allo stesso tempo, il & nel 1224 si compone in "hurrah". Il che prova la mia ipotesi che solo & e non * sono stati aggiunti allora

 

Cioè, in origine, i puntatori sono stati aggiunti a MQL senza la possibilità di dereferenziarli nel codice. Questo è un approccio interessante.

Resta da finire l'aritmetica dei puntatori o è in qualche modo già possibile?

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;

Questo: (* ) non è necessario qui

* è necessario solo in µl quando le operazioni =, ==, !=, !, && o || sono applicate direttamente al * puntatore
 
Ilya Malev:
La & nel 1224, invece, compila a pieni voti. Il che prova la mia ipotesi che solo & e non * sono stati aggiunti in quel momento.

A proposito, può darsi che visto che tutti i canali ufficiali (forum, aiuto, documentazione) tacciono sull'operatore *, gli amministratori potrebbero pensare di rimuoverlo di nuovo e fingere che non sia mai esistito)) Quindi è pericoloso fare molto affidamento sul suo uso in questo momento, imho.