So che questa funzione sarà deprecata in C++ 0x, ma per me come novizio totale mi sembra una buona idea averla. Qualcuno potrebbe spiegarmi perché non è una buona idea?Specifica eccezione
risposta
Si prega di consultare questo articolo dettagliato di Herb Sutter. Ha la spiegazione più approfondita dei problemi e delle carenze del loro design.
Uno sguardo pragmatico al Specificiations eccezione
"_Ecco quello che molti pensano che le specifiche delle eccezioni facciano: - Garantire che le funzioni generino solo eccezioni elencate (probabilmente nessuna)." Pura assurdità. Quel ** esattamente ** quello che fanno. "Abilita le ottimizzazioni del compilatore in base alla consapevolezza che verranno generate solo eccezioni elencate (probabilmente nessuna)." "Ciò che le specifiche delle eccezioni possono fare e alcuni compilatori principali ** in realtà ** lo fanno. – curiousguy
@curiousguy hai letto l'intero articolo? Sulla base del tuo commento sembra che ti sei fermato dopo quella frase. – JaredPar
Non riesco a credere che il C++ 0x fosse già in corso nel 2002. Era da tempo che arrivava! –
recensione di http://www.gotw.ca/publications/mill22.htm
Problema Primo: A “Shadow Tipo di sistema”
Vero, minore punto tecnico e facile da risolvere.
Problema Seconda: (Mis) comprensioni
Ecco quello che molti pensano che le specifiche eccezioni fanno:
suo primo punto:
- garanzia che le funzioni generano solo eccezioni elencate (probabilmente nessuna).
Se questo è ciò che la gente pensa, è molto fine, perché è esattamente quello garanzia ES, per definizione. Herb accetta nello stesso documento:
(ES) applicare in fase di esecuzione che funzioni getterà solo eccezioni elencate (forse nessuno).
Il suo secondo punto:
- Abilita ottimizzazioni del compilatore in base alla consapevolezza che solo elencato eccezioni (forse nessuno) sarà gettato.
Anche questo è assolutamente corretto.
spiega perché questo secondo punto è una convinzione errata con un esempio:
// Example 1(b) reprise, and two
// potential white lies:
//
int Gunc() throw(); // will throw nothing (?)
int Hunc() throw(A,B); // can only throw A or B (?)
ci sono i commenti sono corretti? Non proprio. Gunc() può effettivamente lanciare qualcosa, e Hunc() può ben lanciare qualcosa di diverso da A o B! Il compilatore garantisce semplicemente di batterli senza senso se lo fanno ... oh, e anche per battere il tuo programma senza senso, il più delle volte.
Perché Gunc() o Hunc() potrebbero infatti gettare qualcosa hanno promesso di non farlo, non solo non può assumere il compilatore non accadrà (...)
Herb Quest'ultima osservazione che " (ES) Applica in fase di esecuzione che le funzioni generano solo eccezioni elencate (probabilmente nessuna). "refuta anche questo" argomento ".
Entrambi i 2 punti principali di Herb sono ovviamente, assolutamente, indiscutibilmente errati, secondo lui.
Cos'altro posso aggiungere?
Credo che le parole abbiano un significato fisso, che non possa essere modificato a piacimento, per il bene dell '"argomento".
qualcuno può smentire qualsiasi punto che faccio? Oppure sto svendendo per contraddire il semi-dio Herb Sutter? – curiousguy
Migliore domanda: puoi davvero * dimostrare * i tuoi punti? Dici solo "è così, punto", che non è molto convincente. Non c'è niente di sbagliato nel contraddire qualcuno. "Entrambi i punti principali di Herb sono ovviamente, assolutamente, assolutamente sbagliati." Beh, supponiamo che non sia così ovvio per me quanto lo è per te. Ti va di spiegare cos'è esattamente così ovvio? – Xeo
@ Xeo Quale punto non è ovvio? – curiousguy
Per quanto mi risulta, una specifica eccezione significa:
I wan't voi (il compilatore) per generare il codice in più che fa in modo che l'eccezione è uno di questi tipi. Se non la chiamata si interrompe, per favore, siamo brindisi. Il controllo aggiuntivo dovrebbe essere inserito nel gestore di eccezioni (implicito) (richiesto per implementarlo) in ogni chiamata.
- 1. Ignora specifica eccezione java ...?
- 2. Eccezione grep ma esclude eccezione specifica
- 3. specifica eccezione quando l'override una funzione virtuale
- 4. Differenza tra eccezione: e ad eccezione Eccezione:
- 5. Qual è la specifica di eccezione per un distruttore virtuale predefinito in C++ 11?
- 6. g ++ - 4.8.1 pensa che un distruttore esplicitamente dichiarata, senza specifica eccezione è sempre noexcept (vero)
- 7. Come utilizzare il comando 'mv' per spostare file ad eccezione di quelli in una directory specifica?
- 8. Ambito BizTalk "Eccezione catch" Generale Messaggio eccezione
- 9. Propagazione C++ eccezione per Cython - eccezione pitone
- 10. eccezione: 0xe0434f4d
- 11. ImageMagick.NET Eccezione
- 12. eccezione MSDTC
- 13. XMLSERIALIZE Eccezione
- 14. DateTime.Parse getta eccezione "non supporta in System.Globalization.GregorianCalendar"
- 15. COM: come gestire un'eccezione specifica?
- 16. .NET collega libreria specifica piattaforma
- 17. java: non può rigenerare eccezione: non gestita di tipo eccezione eccezione
- 18. Disattivazione un'avvertenza specifica in una linea specifica in Xcode
- 19. Più cattura specifica o una cattura tutto?
- 20. Requisiti di eccezione a standard Contenitori
- 21. gettare nuova std :: eccezione vs tiro std :: eccezione
- 22. Eccezione Eclipse Eccezione ciclo continuo, niente più handle Windows 7
- 23. Classe di eccezione personalizzata: si estende da Eccezione o Thowable?
- 24. eccezione Raise a eccezione di blocco e reprimere primo errore
- 25. forte garanzia eccezione VS garanzia eccezione di base
- 26. Specifica delle eccezioni
- 27. Specifica RowDefinition.Height nel codice
- 28. ricorsivo specifica noexcept
- 29. Inserimento con un'ora specifica?
- 30. eseguono una migrazione specifica
Vedere http://stackoverflow.com/editing-help e http://stackoverflow.com/faq. Questo non è un forum. –
@John Saunders: è una domanda tecnica aperta ma legittima. Vi sono ragioni per cui la funzionalità viene rimossa dallo standard C++ e possono essere spiegate senza soggettività o argomentazione. –
@ Jonathan: perché me lo stai dirigendo? –