MQL5 El compilador no distingue entre una clase y un puntero a ella - página 10

 
Ilya Malev:

Y cuánto tiempo más pasó antes de que estas operaciones se introdujeran realmente... Probablemente sólo el viento lo sabe. Pero sí, cosas bastante importantes se pueden plantear en el foro durante años sin mucho éxito

Si no te da pereza y te desplazas hacia delante puedes verlo todo:

Foro sobre comercio, sistemas de comercio automatizados y prueba de estrategias de comercio

Bichos, errores, preguntas

Ilyas, 2015.09.03 14:30


Se han añadido los operadores *(Dereferencia/Inderección) y &(Dirección-de), no se harán/planean cambios adicionales en el lenguaje
A *a,*b;

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

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

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

 
Alexey Navoykov:

Bueno, si no te da pereza y te desplazas un poco hacia delante, podrás verlo todo:

Si se desplaza más abajo, encontrará esto:

Ilyas:
Añadido a ambos idiomas. Pero, por desgracia, no llegará a la próxima compilación.

En general, está claro que hace unos tres años, muy probablemente, se añadieron... Pero, ¿dónde está la noticia, dónde está la documentación, la ayuda, por qué sólo se menciona el operador & y no el *, si se añadieron al mismo tiempo? A juzgar por el hecho de que & está en la documentación y * no, podemos suponer que fue * lo que se abandonó por alguna razón justo antes del lanzamiento y finalmente se añadió más tarde. Para saberlo con certeza, tienes que encontrar un post de noticias sobre la compilación en la que se añadió esto, o preguntar a los propios administradores.

 
Puedo dar a los curiosos las builds 1047, 1085, 1210 y 1224 (por esas fechas) para que experimenten ;)

 
Andrey Khatimlianskii:
Puedo darte las builds 1047, 1085, 1210 y 1224 (de esa época) para que experimentes ;)

Puedes dármelo. Mi correo electrónico está en mi perfil.

 
Ilya Malev:

Puedes dármelo. Mi dirección de correo electrónico está en mi perfil.

Quizá a alguien más le guste.

 
Sí, es un tema realmente invernal ))
 
El 47 no corre para mí.
85 (MT4 13.02.15) * no funciona
1210 (MT5 30.10.15) * no funciona
1224 (MT5 16.12.15) * no funciona (es decir, 3 deletreado tres meses después de que el puesto de hilo de preguntas)

Al mismo tiempo, el & en 1224 se compone de "hurra". Lo que demuestra mi hipótesis de que entonces sólo se añadió & pero no *

 

Es decir, originalmente, los punteros se añadieron a MQL sin la posibilidad de desreferenciarlos en el código. Este es un enfoque interesante.

¿Queda por terminar la aritmética del puntero o de alguna manera ya es posible?

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;

Este: (* ) no es necesario aquí

* sólo es necesario en µl cuando las operaciones =, ==, !=, !, && o || se aplican directamente al * puntero
 
Ilya Malev:
Por el contrario, el & en 1224 compila con éxito. Lo que demuestra mi hipótesis de que sólo se añadió & y no * en aquella época.

Por cierto, es muy posible que, dado que todos los canales oficiales (foro, ayuda, documentación) guardan silencio sobre el operador *, los administradores estén pensando en eliminarlo de nuevo y hacer como si nunca hubiera existido)) Por lo tanto, es peligroso depender en gran medida de su uso en este momento, en mi opinión.