2010-03-23 10 views
14

Sé que esta característica estará en desuso en C++ 0x, pero para mí, como principiante total, parece una buena idea tenerla. ¿Alguien podría explicarme por qué no es una buena idea?Excepción Especificación

+0

Consulte http://stackoverflow.com/editing-help y http://stackoverflow.com/faq. Este no es un foro. –

+4

@ John Saunders: es una pregunta técnica abierta pero legítima. Hay razones por las que la característica se está eliminando del estándar de C++, y se pueden explicar sin subjetividad ni argumentación. –

+0

@Jonathan: ¿por qué me estás dirigiendo eso? –

Respuesta

10

Consulte este artículo detallado de Herb Sutter. Él tiene la explicación más completa de los problemas y deficiencias de su diseño.

Una mirada pragmática en Specificiations excepción

+1

"_Hay lo que mucha gente piensa que hacen las especificaciones de excepción: - Garantizar que las funciones solo arrojen excepciones enumeradas (posiblemente ninguna) ._" Puras tonterías. Eso ** exactamente ** lo que hacen. "_Enabilice las optimizaciones del compilador basándose en el conocimiento de que solo se lanzarán las excepciones enumeradas (posiblemente ninguna)". Eso que pueden hacer las especificaciones de excepción, y algunos compiladores principales ** en realidad ** hacen eso. – curiousguy

+0

@curiousguy ¿leíste el artículo completo? Según tu comentario, parece que te detuviste después de esa frase. – JaredPar

+1

No puedo creer que C++ 0x ya estaba en marcha en 2002. ¡Hacía mucho tiempo que llegaría! –

-2

revisión de http://www.gotw.ca/publications/mill22.htm

Emisión del Primer: Un “Sistema de Tipo de la sombra”

Verdadero, punto técnico menor, y fácil de arreglar.

presentar el segundo: (Mis) entendimientos

Esto es lo que mucha gente piensa que las especificaciones de excepción hacen:

Su primer punto: Garantía

  • que las funciones solo arrojarán excepciones enumeradas (posiblemente ninguna).

Si esto es lo que la gente piensa, es muy bien, porque es exactamente lo que garantiza ES, por definición. Hierba está de acuerdo en el mismo documento:

(ES) hacer cumplir en tiempo de ejecución que funciones sólo lanzar excepciones enumeradas (posiblemente ninguno).

Su segundo punto:

  • Habilitar optimizaciones del compilador basado en el conocimiento que sólo aparece excepciones (posiblemente ninguno) será lanzada.

Esto también es absolutamente correcto.

explica por qué este segundo punto es una creencia errónea con un ejemplo:

// 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 (?) 

son los comentarios correcta? No exactamente. Gunc() puede arrojar algo, y Hunc() bien puede lanzar algo que no sea A o B! El compilador simplemente garantiza golpearlos sin sentido si lo hacen ... ah, y para golpear tu programa sin sentido también, la mayoría del tiempo.

Debido Gunc() o hunc() podría de hecho tirar algo que prometió no hacerlo, no sólo no puede asumir el compilador no va a suceder (...)

hierba última observación que " (ES) Haga cumplir en el tiempo de ejecución que las funciones solo arrojarán excepciones enumeradas (posiblemente ninguna). "refute este" argumento "también.

Los dos puntos principales de Herb son obviamente, absolutamente, indiscutiblemente erróneos, según él.

¿Qué más puedo agregar?

Creo que las palabras tienen un significado fijo, que no se puede cambiar a voluntad, por el bien del "argumento".

+0

¿alguien puede refutar cualquier punto que haga? ¿O estoy siendo rechazado por contradecir al semidiós Herb Sutter? – curiousguy

+5

Mejor pregunta: ¿Puedes * demostrar * tus puntos? Simplemente diga "esto es así, punto", lo cual no es muy convincente. No hay nada de malo en contradecir a alguien. 'Los dos puntos principales de Herb son obviamente, absolutamente, indiscutiblemente incorrectos. Bueno, supongamos que no es tan obvio para mí como lo es para ti. ¿Te importa explicar qué es exactamente tan obvio? – Xeo

+0

@Xeo ¿Qué punto no es obvio? – curiousguy

0

Por lo que yo entiendo, una especificación de excepción significa:

Me wa usted (el compilador) para generar código adicional que se asegura de que la excepción es uno de estos tipos. Si no es por llamada, por favor, estamos listos. La verificación adicional debería incluirse en el controlador de excepciones (implícito) (necesario para implementarlo) en cada llamada.

Cuestiones relacionadas