Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 212

 
A100 #:

Ti stai dando la zappa sui piedi - dichiarandoti privato. Vi siete limitati l'accesso e poi vi chiederete perché il codice, dove le funzioni esterne hanno bisogno di un accesso pubblico, improvvisamente smette di funzionare

Tutto funziona bene per me e funzionerà bene. Non sono affari miei se non usi il privato.

 
fxsaber #:

Funziona bene per me e continuerà a farlo. Non sono affari miei se non usi il privato.

Ti stai contraddicendo - strutture semplici e private sono cose incompatibili.

Forum sul trading, sistemi di trading automatico e test di strategia

Peculiarità di mql5, consigli e trucchi

fxsaber, 2021.11.17 07:53

Se confrontate le due funzioni, FileReadStruct funziona solo con strutture semplici. Questa è una differenza fondamentale.

Persino Wikipedia lo sa: il plainold data(POD) èun tipo di dati nei modernilinguaggi di programmazione ad alto livello che ha una disposizione rigidamente definita dei campi in memoria e non richiede restrizioni di accesso econtrollo automatico.
 
A100 #:

Ti stai contraddicendo scrivendo di strutture semplici e private - sono cose incompatibili

Persino Wikipedia lo sa: il plainold data(POD) èun tipo di dati nei modernilinguaggi di programmazione ad alto livello che ha una disposizione rigidamente definita dei campi in memoria e non richiede un accesso limitato e uncontrollo automatico.

Il contesto era chiaro senza leggere la terminologia. Semplice - niente stringhe, array dinamici o oggetti di classe a qualsiasi livello di annidamento.

Con questa definizione, semplice può sempre essere un campo di unione.

struct MqlTick2 : private MqlTick {};

union UNION
{
  MqlTick2 Tick;
  uchar Bytes[sizeof(MqlTick2)];
};

void OnStart()
{
  UNION u;
  
  ArrayInitialize(u.Bytes, 0); // обнулили u.Tick
}
privato non dà alcuna garanzia di immutabilità dall'esterno. E questa è una buona cosa.
 
fxsaber #:

Il contesto era chiaro senza leggere la terminologia. Semplice - niente stringhe, array dinamici e oggetti di classe a qualsiasi livello di annidamento.

Con questa definizione, semplice può sempre essere un campo di unione.

privato non garantisce l'immutabilità dall'esterno. E questa è una buona cosa.

Già si comincia a confondere l'elementare - l'immutabilità è costitutiva, non privata

 
A100 #:

State già iniziando a confondervi sull'elementare - l'immutabilità è const, non privata

Semplicemente non hai capito cosa si intendeva. Forse non mi sto spiegando bene. Non ha più importanza.

 
fxsaber #:

Funziona bene per me e continuerà a farlo. Se non usi il privato - non sono affari miei.

Se usate {} invece di ZeroMemory - non può funzionare perfettamente - ve l'ho mostrato con un esempio concreto- non c'è azzeramento (ma potreste ancora pensare il contrario)

 
A100 #:

Se usate {} invece di ZeroMemory - non può funzionare perfettamente - ve l'ho mostrato con un esempio concreto

Sono solo perfettamente consapevole di cosa, dove e perché lo applico. La particolarità è stata espressa. Non c'era alcun desiderio di discutere di gusti.

 
fxsaber #:

Sono solo perfettamente consapevole di cosa, dove e perché lo applico. Le specifiche sono state espresse. Non c'era alcun desiderio di discutere di gusti.

Le ragioni per non usarlo sono state espresse di conseguenza

 
A100 #:

Se usate {} invece di ZeroMemory - non può funzionare perfettamente - ve l'ho mostrato con un esempio concreto- non c'è azzeramento (ma potete ancora pensare il contrario)

Per l'unione inizializziamo solo il primo membro, scambiamo i campi e il test verrà eseguito.
Consideriamo se dobbiamo cambiare il comportamento a scapito della velocità per renderlo come la maggior parte degli utenti si aspetta.


Il file... apparso quando la privacy e la costanza non esistevano, non abbiamo ancora pensato a cambiare questo comportamento, perché non lo consideriamo critico.

 
Ilyas #:

Il file... apparso quando la privacy e la costanza non esistevano, non abbiamo ancora pensato a cambiare questo comportamento, perché non lo consideriamo critico.

E non c'è bisogno di cambiare il comportamento delle funzioni esistenti - è sufficiente aggiungere nuove funzioni corrette (con qualche prefisso/suffisso) e dichiarare quelle precedenti obsolete con un avviso corrispondente

Motivazione: