Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 211

 
fxsaber #:

Tu stesso hai segnalato il 4° errore. Perché ZeroMemory è peggio di {}? Cioè abbiamo qualche meccanismo non autorizzato di accesso al privato che non viene rilevato dal compilatore per qualche motivo.

Sta mettendo in conto che gli sviluppatori non risolveranno il problema? Una volta il compilatorenon reagiva nemmeno aZeroMemory

 
A100 #:

Tu stesso hai segnalato il 4° errore. Perché ZeroMemory è peggio di {}? Cioè abbiamo qualche meccanismo non autorizzato di accesso al privato che il compilatore non può rilevare per qualche motivo.

Non credo che sia un errore. La struttura non ha un costruttore ma viene inizializzata. FileReadStruct - è una cosa davvero spaventosa...

 
fxsaber #:

Non lo vedo come un errore. La struttura non ha un costruttore, è inizializzata. FileReadStruct è una cosa abbastanza spaventosa allora.

uint  FileReadStruct( 
   int          file_handle,        // handle файла 
   const void&  struct_object,      // структура, куда происходит считывание 
   int          size=-1             // размер структуры в байтах 
   );

A giudicare dalla descrizione - questo è una specie di auto-inganno

 
A100 #:

Dalla descrizione, sembra una specie di auto-inganno.

Beh, sì - è tutto un inganno.

 
A100 #:

A giudicare dalla descrizione, si tratta di una specie di autodistruzione

Riferimento alla documentazione senza considerare gli artefatti da copia-incolla - strano.

 
fxsaber #:

Link alla documentazione senza considerare gli artefatti del copia-incolla - strano.

Vedo questa funzione per la prima volta - avrebbero potuto informarmi che c'è un errore nella descrizione

C'è un errore strutturale oltre alla descrizione:

struct X {
    X( int i ) : i( i ) {}
    const int i;
};
void OnStart()
{
    X x( 5 );
    FileReadStruct( 0, x, -1 ); //(1) нормально ???
    ZeroMemory( x );            //(2) Error: 'x' - not allowed for objects with protected members or inheritance
}

Perché ZeroMemory è peggiore di FileReadStruct?

Un'altra speranza che gli sviluppatori non lo noteranno, lo rimanderanno o saranno troppo pigri per aggiustarlo (sottolineare il punto)?

La mia argomentazione è semplice: una volta ZeroMemory compilava con tutto questo (compreso il privato ), ma se ne sono accorti, se ne sono impossessati e l'hanno corretto.

 
A100 #:

È la prima volta che vedo questa funzione - avrebbero potuto dirmi che c'era un errore nella descrizione.

Non ho mai guardato la descrizione di questa funzione. Tutto è chiaro dal nome.

Oltre alla descrizione c'è anche un errore strutturale:

Non c'è nessun errore nel seguente codice.

struct MqlTick2 : private MqlTick {};

void OnStart()
{
  MqlTick2 Ticks[4] = {};

  uchar Bytes[];
  
  StructToCharArray(Ticks[0], Bytes);
  CharArrayToStruct(Ticks[1], Bytes);

  FileReadStruct(0, Ticks[0]);
  FileWriteStruct(0, Ticks[1]);
  
  FileWriteArray(0, Ticks);
  FileReadArray(0, Ticks);
}

La noia non vincerà sulla convenienza!


Perché ZeroMemory è peggiore di FileReadStruct?

Lei ama fare riferimento alla documentazione. Lì dice tutto sulle limitazioni di ZeroMemory. Ma non dice nulla sulle limitazioni di File*. Per quanto riguarda ZeroMemory, giudico da quello che ho. Non è conveniente ora, ma sembra che sia stato fatto apposta.

Ma se confrontate queste due funzioni, FileReadStruct funziona solo con strutture semplici. Questa è una differenza fondamentale.


Questo argomento riguarda le peculiarità di MQL5. Ne ho indicato uno (non funziona in MQL4). Questo dialogo è, purtroppo, una perdita di tempo

 
fxsaber #:

Non ci sono errori nel seguente codice.

Vi piace fare riferimento alla documentazione. Questo dice tutto sui limiti di ZeroMemory. Ma non dice nulla sulle limitazioni di File*. Per quanto riguarda ZeroMemory, mi affido a quello che ho. Non è conveniente ora, ma sembra che sia stato fatto apposta.

Ma se confrontate queste due funzioni, FileReadStruct funziona solo con strutture semplici. Questa è una differenza di principio fondamentale.

C'è un errore (il compilatore semplicemente non ce lo segnala al momento) ed è questo: qualche funzione (cioè FileReadStruct) esterna alla classe accede direttamente ai membri protetti di questa classe, il che contraddice il concetto stesso di privato, protetto.

E in che modo questa funzione è migliore diZeroMemory e di centinaia di altre funzioni? Niente! - Gli sviluppatori non si sono ancora messi all'opera.Anche ZeroMemory non ha specificato alcuna limitazione nella documentazione prima.Ma ora c'è - e non perché causa qualche inconveniente - ma perché un unico principio funziona - siaFileReadStruct cheZeroMemory, o centinaia di altre funzioni simili - sono tutti uguali.

 
A100 #:

che cento altre funzioni simili sono tutte uguali

FileLoad/FileSave alla casella di disuguaglianza.

La convenienza non avrà la meglio!

Non c'è motivo di darsi la zappa sui piedi.

 
fxsaber #:

FileLoad/FileSave più alla casella di disuguaglianza.

Non c'è motivo di darsi la zappa sui piedi.

Sei tu che ti stai dando la zappa sui piedi - dichiarandoti privato. Avete un accesso limitato a voi stessi e poi vi chiederete perché il codice dove è richiesto l'accesso pubblico per le funzioni esterne ha improvvisamente smesso di funzionare

Motivazione: