2010-03-23 12 views
14

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

+0

Vedere http://stackoverflow.com/editing-help e http://stackoverflow.com/faq. Questo non è un forum. –

+4

@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. –

+0

@ Jonathan: perché me lo stai dirigendo? –

risposta

10

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

+1

"_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

+0

@curiousguy hai letto l'intero articolo? Sulla base del tuo commento sembra che ti sei fermato dopo quella frase. – JaredPar

+1

Non riesco a credere che il C++ 0x fosse già in corso nel 2002. Era da tempo che arrivava! –

-2

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".

+0

qualcuno può smentire qualsiasi punto che faccio? Oppure sto svendendo per contraddire il semi-dio Herb Sutter? – curiousguy

+5

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

+0

@ Xeo Quale punto non è ovvio? – curiousguy

0

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.

Problemi correlati