Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 210

 
fxsaber #:

Non capisco. L'azzeramento è una cosa utile, quindi ha senso.

C'è ZeroMemory per l'azzeramento, e questo azzeramento generalmente non funziona correttamente - ecco degli esempi

 
A100 #:

ZeroMemory è per l'azzeramento, e questo azzeramento generalmente non funziona correttamente - ecco degli esempi

Funziona benissimo, lo uso.

 
fxsaber #:

Funziona benissimo, lo sto usando.

Se ottimo, allora perché questo esempio con F5 si blocca, ma non con ZeroMemory?

E perché qui - compila con {} manon conZeroMemory?

 
A100 #:

Se è grande, allora perché questo esempio rimane in giro tramite F5, ma non tramite ZeroMemory?

Perché è solo un altro bug che verrà risolto.

E perché qui - compila con {} manon conZeroMemory

In questo esempio {} funziona.

 
fxsaber #:

In questo esempio {} funziona.

È un bug che funziona e sarà anche corretto - e non compilerà

 
A100 #:

È un bug che funziona e sarà anche risolto - e non si compila

Allora qual è il reclamo? Non vedo alcuna ragione per non usare il {}-meccanismo in luoghi critici per la velocità.

 
fxsaber #:

Allora qual è il reclamo? Non vedo alcuna ragione per non usare il {}-meccanismo in luoghi critici per la velocità.

Perchéun "grande" meccanismo ha già avuto due bug (!). Allo stesso tempo c'è un'alternativa collaudata nel tempo - ZeroMemory, che è anche più veloce (almeno tramite F5). La scelta è ovvia

 
A100 #:

Al fatto che il"magnifico" meccanismo ha già avuto due errori al volo (!).

Questi errori non hanno nulla a che fare con l'applicazione di combattimento.

Tuttavia, c'è un'alternativa collaudata nel tempo, ZeroMemory, che è anche più veloce (almeno tramite F5). La scelta è ovvia

Penso che non ci sia dubbio su quale voce sia più concisa e logica delle seguenti.

int i = 0;

int j;
j = 0;

Con gli array è simile.

 
fxsaber #:

Questi errori non hanno nulla a che fare con l'uso in combattimento.

Penso che non ci sia dubbio su quale voce sia la più concisa e logica delle seguenti.

È lo stesso con gli array.

Ecco il terzo errore (e quanti altri ce ne sono) in una volta sola (!):

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 );
}

Risultato: falso - cioè l'azzeramento non avviene (!).

Ma con ZeroMemory

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

Risultato: vero - tutto va bene - azzeramento completo

Naturalmente, avete il diritto di giocare alla lotteria e di usare una voce laconica (1 riga in meno) invece di quella ovviamente corretta

 
A100 #:

E con ZeroMemory

Risultato: vero - tutto OK - azzeramento completo

struct MqlTick2 : private MqlTick {};

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