Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
¡Bingo!
No es del todo un bingo. Para los objetos simples, la asignación con el operador = funciona. Seguro que no se trata de un error.
...
No. Cuando no está asignando un puntero a automático, está copiando un objeto - los valores de sus campos, pero sólo con objetos simples.
Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias
El compilador MQL5 no distingue entre una clase y un puntero
SemenTalonov, 2019.01.10 04:18
Desde cuándo se definen (pregunta a los desarrolladores)
¿y cómo funcionan? El siguiente código compilado parece delirante
Y aquí la situación no está clara
No es exactamente un bingo. Para los objetos simples, la asignación con el operador = funciona. Seguro que no es un error.
Así es, ese es el punto más importante.
Personalmente, creo que no se puede utilizar un operador de asignación de objetos si éste no está definido explícitamente, aunque los objetos sean simples. Todavía podemos acordar de alguna manera la asignación de estructuras simples. Pero las clases en las que se llama necesariamente al constructor (al menos implícitamente) - sólo pueden ser asignadas por operadores definidos explícitamente.
En mi opinión, esto se hizo para facilitar la vida a los novatos.
Así es, este es el punto más importante.
Personalmente, creo que no se puede utilizar un operador de asignación para objetos si ese operador no está definido explícitamente, aunque los objetos sean simples. Podemos acordar de alguna manera la asignación de estructuras simples. Pero las clases en las que se llama necesariamente al constructor (al menos, implícitamente) - sólo pueden asignarse con operadores definidos explícitamente.
En mi opinión, esto se hizo para facilitar la vida a los principiantes.
Y los complejos son convenientes - sin ellos no se puede devolver MqlTradeRequest, por ejemplo. Y en las estructuras también se llama necesariamente a un constructor.
Existe la teoría de que MQL es un C# muy despojado. Así que es comprensible el comportamiento del compilador MQL en este caso. Después de todo, las clases en C# se colocan siempre en el montón, por lo tanto:
Ahora vamos a tratar con la matriz m_A. Como m_A es un array de clases y las clases siempre se colocan en el montón, no es necesario especificar si el array m_A es un array de punteros o un array de objetos en sí, porque sólo la primera variante siempre funciona para las clases. Como m_A es siempre un array de punteros, MQL no tiene que especificar si almacena tipos de referencia o tipos significativos. Por lo tanto, A* m_A[2] == A m_A[2]. Amén.
Existe la teoría de que MQL es un C# muy despojado. Así que es comprensible el comportamiento del compilador MQL en este caso. Después de todo, las clases en C# se colocan siempre en el montón, por lo tanto:
Ahora vamos a tratar con la matriz m_A. Como m_A es un array de clases y las clases siempre se colocan en el montón, no es necesario especificar si el array m_A es un array de punteros o un array de objetos en sí, porque sólo la primera variante siempre funciona para las clases. Como m_A es siempre un array de punteros, MQL no tiene que especificar si almacena tipos de referencia o tipos significativos. Por lo tanto, A* m_A[2] == A m_A[2]. Amén.
Conclusión incorrecta. m_A es un array de objetos, no punteros. Y estos objetos están completamente destruidos. No es el nuevo A el que se destruye.
Salida incorrecta. m_A es un array de objetos, no punteros. Y estos objetos están completamente destruidos. No es el nuevo A el que se destruye.
Ese es un buen ejemplo. Bueno, pensemos más.
Pfft)) Estoy sorprendido por esto.
Uf)) La verdad es que estoy sorprendido por esto.
¿Qué tiene de malo? En un caso un objeto, en el otro un puntero.