Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 202
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Le funzioni standard ricevono gli argomenti da sinistra a destra.
Le funzioni personalizzate ricevono gli argomenti da destra a sinistra.
Risultato.
È così che dovrebbe essere?
È così che deve essere?
Questo è un UB su cui non si può fare affidamento. Cioè si devono evitare esplicitamente situazioni in cui la logica di un programma dipende dall'ordine in cui gli argomenti sono valutati
Le funzioni regolari ricevono argomenti da sinistra a destra.
Ecco un esempio confutante:
Risultato: 2 1
Questo è un UB su cui non si può fare affidamento. Cioè dobbiamo evitare esplicitamente situazioni in cui la logica di un programma dipende dall'ordine di valutazione degli argomenti
Ecco un esempio di confutazione:
Si scopre che tutto è instabile con quelli personalizzati. Con quelli personalizzati, tutto è instabile dall'inizio.
Si scopre che tutto è instabile con quelli standard. Con quelli personalizzati, è inequivocabile fin dall'inizio.
La differenza è che ci sono funzioni regolari (da destra a sinistra) e funzioni in linea (ordine indefinito).
le funzioni inline non sono affatto funzioni, cioè non possono avere un indirizzo. Da questo punto di vista, non c'è differenza tra le funzioni regolari e quelle personalizzate, quindi, per esempio, non è chiaro perché gli argomenti della funzione personalizzata più semplice (che è in sostanza inline) sono sempre calcolati da destra a sinistra. Non escludo che in futuro per le funzioni in linea l'ordine possa cambiare, quindi
Ho suggerito una volta di introdurre una parola chiave inline per un uso sicuro dell'ordine dei calcoli:
Forum sul trading, sistemi di trading automatico e test di strategie di trading
Errori, bug, domande
A100, 2017.10.05 14:30
Questo dimostra ancora una volta l'utilità della parola chiave C++ inline (c'era un'opinione qui che era presumibilmente obsoleta).
Tra le altre cose, inline significa effettivamente che il programmatore non usa l'ordine di calcolo dei parametri della funzione e se il compilatore decide di rendere la funzione inline, allora il compilatore può usare l'ordine di calcolo in avanti come più efficiente (l'ordine di calcolo inverso è ovviamente efficiente solo per funzioni chiamate).
Allo stesso tempo, se il compilatore decide di incorporare una funzione non inline, dovrebbe usare l'ordine (generale) inverso di valutazione, anche se questo porta a una perdita di efficienza (perché il programmatore ha assunto questo ordine senza aver dichiarato la funzione inline)
inline sarebbe anche appropriato in MQL, dove l'ordine di calcolo non può essere controllato esplicitamente
La differenza è che ci sono funzioni normali (da destra a sinistra) e funzioni in linea (ordine indefinito).
Le funzioni in linea non sono affatto funzioni, cioè non possono avere un indirizzo. Da questo punto di vista, non c'è differenza tra le funzioni regolari e quelle personalizzate, quindi, per esempio, non è chiaro perché gli argomenti della funzione personalizzata più semplice (che è in sostanza inline) sono sempre calcolati da destra a sinistra. Non escludo che in futuro per le funzioni in linea l'ordine possa cambiare, quindi
Ho suggerito una volta di introdurre la parola chiave inline per un uso sicuro dell'ordine di calcolo:
Grazie per il chiarimento, non avevo pensato all'inline.
Questa opzione non ha effetto sul risultato.
Grazie per il chiarimento, non avevo pensato all'inline.
Questa opzione non influenza il risultato.
Non ha effetto ora, perché non esiste in MQL
e in futuro potrebbe avere un significato reale, altrimenti perché sarebbe stato introdotto?
Non ha effetto ora, perché in MQL è un po' assente ora
e in futuro potrebbe avere un significato reale, altrimenti perché sarebbe stato introdotto?
Per quanto ricordo dall'aiuto alla versione, è stato introdotto come stub per permettere di inlineare i file *.h.