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
Respuesta
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
"_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
@curiousguy ¿leíste el artículo completo? Según tu comentario, parece que te detuviste después de esa frase. – JaredPar
No puedo creer que C++ 0x ya estaba en marcha en 2002. ¡Hacía mucho tiempo que llegaría! –
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".
¿alguien puede refutar cualquier punto que haga? ¿O estoy siendo rechazado por contradecir al semidiós Herb Sutter? – curiousguy
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
@Xeo ¿Qué punto no es obvio? – curiousguy
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.
- 1. Excepción Especificación
- 2. Especificación de excepción bypass java ...?
- 3. especificación de excepción de gcc destructor predeterminado
- 4. Cómo deshacerse de la "especificación de excepción C++ ignorada" advertencia
- 5. especificación de excepción al redefinir una función virtual
- 6. Especificación formal
- 7. JSR: Especificación para evaluación vs Especificación para construir una implementación
- 8. ¿Cuál es la especificación de excepción para un destructor virtual predeterminado en C++ 11?
- 9. ¿Excepción marcada Java no en la especificación de lanzamiento de la función?
- 10. .gemrc archivo de especificación
- 11. WordPress WXR Especificación
- 12. Especificación del lenguaje PHP?
- 13. La especificación de RSpec falla cuando se invoca mediante "especificación de rake", se pasa cuando se invoca mediante "especificación de especificación"
- 14. Ejemplo de patrón de especificación
- 15. Patrón de especificación y rendimiento
- 16. Procedimiento de especificación del paquete
- 17. Especificación de bytecode de Java
- 18. Especificación RowDefinition.Height en el código
- 19. ¿Cómo escribir una especificación funcional?
- 20. ActionScript 3 ¿Especificación como PDF?
- 21. C parámetros # tipo de especificación
- 22. BizTalk: Encontrar la especificación del documento no
- 23. Ayuda de implementación del patrón de especificación
- 24. Excepción simultánea Excepción
- 25. Desactivar dispositivos transaccionales para una especificación con RSpec 2
- 26. excepción de configuración log4net
- 27. Especificación del tipo de contenido en rspec
- 28. Creando un ayudante de especificación en rubymotion
- 29. Especificación de alternativas en dependencias de RPM
- 30. Especificación del referer HTTP en UIWebView incrustado
Consulte http://stackoverflow.com/editing-help y http://stackoverflow.com/faq. Este no es un foro. –
@ 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. –
@Jonathan: ¿por qué me estás dirigiendo eso? –