Características del lenguaje mql5, sutilezas y técnicas - página 210

 
fxsaber #:

No lo entiendo. La puesta a cero es algo útil, así que tiene sentido.

Existe ZeroMemory para la puesta a cero, y esta puesta a cero generalmente no funciona correctamente - aquí hay ejemplos

 
A100 #:

ZeroMemory es para la puesta a cero, y esta puesta a cero generalmente no funciona correctamente - aquí hay ejemplos

Funciona muy bien, yo lo uso.

 
fxsaber #:

Funciona muy bien, lo estoy usando.

Si es así, ¿por qué este ejemplo con F5 se cuelga, pero no con ZeroMemory?

¿Y por qué aquí se compila con {} perono conZeroMemory?

 
A100 #:

Si es así, ¿por qué este ejemplo se mantiene a través de F5, pero no a través de ZeroMemory?

Porque es un error más que se arreglará.

Y por qué aquí - compila con {} perono conZeroMemory

En este ejemplo {} funciona.

 
fxsaber #:

En este ejemplo {} funciona.

Es un error que funciona y que también se arreglará - y no se compilará

 
A100 #:

Es un error que funciona y también se arreglará - y no se compilará

Entonces, ¿cuál es la queja? No veo ninguna razón para no usar {}-mecanismo en lugares donde la velocidad es crítica.

 
fxsaber #:

Entonces, ¿cuál es la queja? No veo ninguna razón para no usar {}-mecanismo en lugares donde la velocidad es crítica.

Porqueun mecanismo"genial" ya ha tenido dos fallos (¡!). Al mismo tiempo, existe una alternativa probada en el tiempo: ZeroMemory, que también es más rápida (al menos a través de F5). La elección es obvia

 
A100 #:

Al hecho de que el"magnífico" mecanismo ya ha tenido dos errores sobre la marcha (¡!).

Estos errores no tienen nada que ver con la aplicación de combate.

Sin embargo, existe una alternativa probada, ZeroMemory, que también es más rápida (al menos a través de F5). La elección es obvia

Creo que no hay duda de cuál es la entrada más concisa y lógica de las siguientes.

int i = 0;

int j;
j = 0;

Con las matrices, es similar.

 
fxsaber #:

Estos errores no tienen nada que ver con el uso del combate.

Creo que no hay duda de cuál es la entrada más concisa y lógica de las siguientes.

Lo mismo ocurre con las matrices.

Aquí está el tercer error (y cuántos más hay) de una vez (!):

union X {
    int i;
    double x;
};
void OnStart()
{
    X x[10000] = {}; //(*)
    bool b = true;
    for ( int i = 0; i < ArraySize(x) && (b = (x[i].x == 0.0)); i++ );
    Print( b );
}

Resultado: falso - es decir, la puesta a cero no se produce (!).

Pero con ZeroMemory

    X x[10000];      //(*)
    ZeroMemory( x ); //(**)

Resultado: verdadero - todo está bien - puesta a cero completa

Por supuesto, tiene derecho a jugar a la lotería y utilizar una entrada lacónica (1 línea menos) en lugar de la obviamente correcta

 
A100 #:

Y con ZeroMemory

Resultado: verdadero - todo bien - puesta a cero completa

struct MqlTick2 : private MqlTick {};

void OnStart()
{
  MqlTick2 Ticks[4] = {}; // OK
  
  ZeroMemory(Ticks); // 'Ticks' - not allowed for objects with protected members or inheritance
}
Razón de la queja: