2012-04-25 16 views
13

Ricordo la codifica su piattaforme con RTTI e eccezioni disabilitate e su altre che avevano entrambe abilitate. Tuttavia, non riesco a ricordare la codifica su una piattaforma che ne abilita una e disabilita l'altra.Esiste una relazione tra RTTI ed eccezioni?

Esiste qualche tipo di dipendenza tra i due concetti? Detto diversamente, le eccezioni richiedono il funzionamento di RTTI? Oppure il contrario?

+0

AFAIR MSVC 5 o 6 aveva rtti off e le eccezioni attivate per impostazione predefinita. Potrebbe essere sbagliato, è stato tanto tempo fa. –

+0

Questo articolo sulla [ortogonalità di RTTI ed eccezioni] (http://monoinfinito.wordpress.com/2013/07/25/c-exceptions-under-the-hood-appendix-iii-rtti-and-exceptions-orthogonality /) aggiunge a questo argomento. Mostra che anche se la funzionalità esposta è indipendente, le eccezioni in gcc usano effettivamente la loro versione di "RTTI" per funzionare. – Chuim

risposta

10

No, le eccezioni non richiedono la funzionalità RTTI né viceversa entrambe sono funzioni separate.

Alcune delle implementazioni potrebbero consentire di disabilitare le eccezioni (-fnoexceptions in gcc) ma non conosco alcuna implementazione che richiede RTTI per le eccezioni o viceversa.

+6

Forse le eccezioni non richiedono le esplicite funzionalità di C++ RTTI come type_info e dynamic_cast, ma sicuramente hanno bisogno di un qualche tipo di RTTI. L'eccezione generata deve essere in grado di confrontare il suo tipo con i gestori catch sullo stack delle eccezioni, il che implica un qualche tipo di RTTI. –

1

Non dipendono l'uno dall'altro, ma sono entrambe funzioni pesanti, quindi se c'è una piattaforma con prestazioni scadenti probabilmente verranno entrambe tagliate insieme.

+0

Questo è un argomento piuttosto obsoleto. Le eccezioni hanno costi di runtime pari a zero fino a quando non vengono lanciati (il che dovrebbe avvenire solo in casi eccezionali). Analogamente, RTTI è solo un aumento della dimensione del codice. Se la dimensione del codice è un problema, entrambi aggiungono dimensioni, ma non ostacolano le prestazioni semplicemente abilitando. –

Problemi correlati