Características da linguagem mql5, subtilezas e técnicas - página 210

 
fxsaber #:

Não percebo. A zeragem é uma coisa útil, por isso faz sentido.

Existe ZeroMemória para zeragem, e esta zeragem geralmente não funciona correctamente - aqui estão exemplos

 
A100 #:

ZeroMemory é para zeragem, e esta zeragem geralmente não funciona correctamente - aqui estão exemplos

Funciona muito bem, eu utilizo-a.

 
fxsaber #:

Funciona muito bem, estou a usá-lo.

Se é óptimo, então porquê este exemplo com F5 pendura, mas não com ZeroMemory?

E porquê aqui - compila com {} masnão comZeroMemory?

 
A100 #:

Se é óptimo, então porque é que este exemplo anda por aí via F5, mas não via ZeroMemory?

Porque é apenas mais um bug que será corrigido.

E porque aqui - compila com {} masnão comZeroMemory

Neste exemplo {} funciona.

 
fxsaber #:

Neste exemplo {} funciona.

É um bug que funciona e também será corrigido - e não será compilado

 
A100 #:

É um bug que funciona e também será corrigido - e não será compilado

Então, qual é a queixa? Não vejo razão para não utilizar o {}-mecanismo em locais críticos em termos de velocidade.

 
fxsaber #:

Então, qual é a queixa? Não vejo razão para não utilizar o {}-mecanismo em locais críticos em termos de velocidade.

Porqueum mecanismo"grande" já teve dois bugs (!). Ao mesmo tempo, existe uma alternativa testada no tempo - ZeroMemory, que também é mais rápida (pelo menos via F5). A escolha é óbvia

 
A100 #:

Ao facto de o mecanismo"magnífico" já ter tido dois erros na mosca (!).

Estes erros não têm nada a ver com a aplicação de combate.

No entanto, existe uma alternativa testada no tempo, ZeroMemory, que também é mais rápida (pelo menos via F5). A escolha é óbvia

Penso que não há dúvida de que a entrada é mais concisa e lógica das seguintes.

int i = 0;

int j;
j = 0;

Com arrays, é semelhante.

 
fxsaber #:

Estes erros não têm nada a ver com a utilização em combate.

Penso que não há dúvida de qual das entradas é a mais concisa e lógica do seguinte.

O mesmo se passa com as matrizes.

Aqui está o terceiro erro (e quantos mais existem) de uma só 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 - ou seja, a zeragem não ocorre (!).

Mas com ZeroMemory

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

Resultado: verdadeiro - tudo está bem - zeragem completa

É claro que tem o direito de jogar na lotaria e utilizar a entrada lacónica (menos 1 linha) em vez de obviamente corrigir uma

 
A100 #:

E com ZeroMemory

Resultado: verdadeiro - tudo OK - zeragem completa

struct MqlTick2 : private MqlTick {};

void OnStart()
{
  MqlTick2 Ticks[4] = {}; // OK
  
  ZeroMemory(Ticks); // 'Ticks' - not allowed for objects with protected members or inheritance
}