Errori, bug, domande - pagina 1890
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
Qual è l'errore di esecuzione
Esatto, non si può guidare dal basso verso l'alto, ma solo dall'alto verso il basso. Questo è per la sicurezza.
Non si può fare un paragone con il C++ - lì qualsiasi cosa può essere ridotta a qualsiasi cosa.
In C++ funziona anche solo se un puntatore a una classe base punta al suo discendente.
Non so cosa intendi con questo, ma questo codice:
Esatto, non si può guidare dal basso verso l'alto, ma solo dall'alto verso il basso. Questo è per la sicurezza.
Non si può fare un paragone con il C++ - lì qualsiasi cosa può essere ridotta a qualsiasi cosa.
Capito ora, grazie per il chiarimento ))
Non so cosa intendi con questo, ma questo codice:
Esatto, non si può guidare dal basso verso l'alto, ma solo dall'alto verso il basso.
Vuoi dire che non puoi fare il cast da una classe base a una discendente?
Sì, nel caso in cui la classe base non abbia un discendente effettivamente costruito.
Esatto, non si può guidare dal basso verso l'alto, ma solo dall'alto verso il basso. Questo è per la sicurezza.
Sì.
Renat, sai cos'è dynamic_cast?
Naturalmente.
Guardate il pezzo di codice MQL5 discusso. Un'istanza base viene creata e poi cerca eroicamente di convertire via dynamiccast in discendente in violazione della sicurezza. Beh, è un peccato, ovviamente.
Lo stesso esempio è discusso e spiegato direttamente nella documentazione. Il cast dinamico in fase di esecuzione viene attivato solo dopo che il sistema di sicurezza e l'ammissibilità delle conversioni sono stati controllati. Ogni oggetto MQL5 ha tutte le meta-informazioni per il controllo dei diritti in fase di esecuzione. Questo non è un C++ vuoto.
Conversione dinamica del tipo usando l'operatore dynamic_cast
È possibile effettuare il cast dinamico dei tipi usando l'operatore dynamic_cast, che può essere applicato solo ai puntatori di classe. In questo caso, il controllo di correttezza dei tipi viene eseguito al momento dell'esecuzione del programma. Significa che quando si usa l'operatore dynamic_cast il compilatore non controlla il tipo di dati usato per la conversione. Se viene eseguita la conversione di un puntatore a un tipo di dati che non è il tipo di oggetto effettivo, il risultato sarà NULL.
dynamic_cast<tipo-id> ( espressione )
Il parametro type-id tra parentesi angolari deve essere un puntatore a un tipo di classe precedentemente definito . Iltipo di operando dell'espressione (al contrario del C++) può essere qualsiasi cosa tranne void.
Esempio:
classe CBar { };
classe CFoo :public CBar { };
voidOnStart( )
{
Bar CBar;
//--- il cast dinamico del tipo di puntatore *bar al puntatore *foo è permesso
CFoo *foo =dynamic_cast<CFoo*>(&bar);//--- nessun errore critico di esecuzione
Stampa(pippo);// foo=NULL
//--- provare esplicitamente a lanciare un riferimento dell'oggetto Bar in un oggetto Foo è proibito
pippo=(CFoo *)&bar;// si verificherà un errore critico di esecuzione
Stampa(pippo);// questa linea non sarà eseguita
}