Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 215
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
A proposito, se si obietta un array statico X x[n]; e X ha un k-tor, allora tutti i campi di elementi in esso saranno azzerati prima, anche quelli privati, e solo allora il k-tor sarà chiamato. Quindi non c'è alcuna violazione del paradigma OOP nell'azzeramento dei campi privati.
Ma il fatto che il costruttore non abbia funzionato è un bug.
A proposito, se creiamo un array statico X x[n]; e X ha un k-tor, allora tutti i campi di elementi in esso vengono azzerati prima, anche quelli privati, e solo allora viene chiamato il k-tor. Quindi non c'è alcuna violazione del paradigma OOP nell'azzeramento dei campi privati.
È fantastico. Così, si scopre che l'azzeramento viene PRIMA del costruttore, e quindi tutto è corretto. Grazie!
Ho guardato la mia ricerca in MQL5, potrebbe essere peggio, ho anche pompato la storia nell'indicatore di diversi TF:
Posso scrivere molte cose in una dichiarazione for ))))
Non ho mai incontrato una chiamata a una funzione nulla in una dichiarazione for. Ho visto altre varianti abbastanza spesso.
Ho dimenticato di aggiungere, se una classe ha campi (oggetti) non banali, allora dopo lo zero-init dell'intero oggetto per tali campi sarà chiamato il loro c-tor di default.
Leggere:
Gli effetti dell'inizializzazione dei valori sono:
Leggi su default-initialized:
UB!
Il fatto che il compilatore inizializzi con degli zeri, non significa nulla, oggi inizializza, e domani, dopo il prossimo aggiornamento....
Leggere:
Gli effetti dell'inizializzazione dei valori sono:
Leggi su default-initialized:
UB!
Il fatto che il compilatore inizializzi con degli zeri non significa nulla, oggi inizializza, e domani, dopo il prossimo aggiornamento....
Il mio post "Forgot to add...." è stato scritto come supplemento al post precedente:
Forum sul trading, sistemi di trading automatico e test di strategie di trading
Peculiarità del linguaggio mql5, consigli e trucchi
mktr8591, 2021.11.18 18:15
@A100
Se ricordate che mql è stato generato da C++, entrambi questi esempi (le loro controparti) funzionano bene lì perché non ci sono costruttori in queste classi (cioè c'è un costruttore implicito):
Esempio in C++:
Quindi se non ci sono campi const nella struttura/classe, allora la logica è corretta.
Ha considerato una certa situazione - quando una classe non ha costruttori utente e c'è un costruttore implicito che non viene cancellato. In questo caso il punto 1 da lei citato non è appropriato.
Punto"2) se T è un tipo di classe con un costruttore predefinito che non è né fornito dall'utente né cancellato (cioè, può essere una classe con un costruttore predefinito implicitamente definito o predefinito), l'oggetto èzero-inizializzato e i vincoli semantici per l'inizializzazione di default sono controllati, e se T ha un costruttore di default non banale, l'oggetto èinizializzato di default;".
Quindi tutto si incastra.
Leggere:
Gli effetti dell'inizializzazione dei valori sono:
Leggi su default-initialized:
UB!
Il fatto che il compilatore inizializzi con degli zeri, non significa nulla, oggi inizializza, e domani, dopo il prossimo aggiornamento....
Ops, ho letto male. In questo caso:
2) se Tè un tipo di classe con un costruttore predefinito che non è né fornito dall'utente né cancellato (cioè, può essere una classe con un costruttore predefinito implicitamente definito o predefinito), l'oggetto èzero-inizializzatoe i vincoli semantici per l'inizializzazione di default sono controllati, e se Tha un costruttore di default non banale, l'oggetto èinizializzato di default;Fantastico. Si scopre che l'azzeramento viene PRIMA del costruttore, quindi tutto è corretto. Grazie!
Non ho visto una chiamata di funzione void in una dichiarazione for. Le altre varianti sono abbastanza comuni.
Potete scrivere qualsiasi cosa vogliate nel terzo parametro dell'istruzione for, infatti, l'istruzione for può sostituire l'istruzione if() con {.....}
SZZ: Ho anche visto macro come
Potete scrivere qualsiasi cosa vogliate nel terzo parametro dell'istruzione for, infatti, l'istruzione for può sostituire l'istruzione if() con {.....}
SZZ: Ho anche visto macro come
Togli il punto e virgola, altrimenti si perde tutto il senso)))
Togliere il punto e virgola, altrimenti tutto il significato è perso))))
Sì, giusto - questo esempio in macro per mettere ; quando si chiama una macro, non uso molto le macro - non ho pratica