C++ proporciona una sintaxis para excepciones controladas, por ejemplo:¿Por qué no se verifican las excepciones en C++ por el compilador?
void G() throw(Exception);
void f() throw();
Sin embargo, el Visual C++ compilador no comprueba ellos; la bandera de tiro simplemente se ignora. En mi opinión, esto hace que la característica de excepción no se pueda usar. Entonces mi pregunta es: ¿hay alguna manera de que el compilador compruebe si las excepciones se capturan/vuelven a lanzar correctamente? Por ejemplo, un complemento de Visual C++ o un compilador de C++ diferente.
PS. Quiero que el compilador compruebe si las excepciones están correctamente capturadas, de lo contrario terminarás en una situación en la que tienes que poner un truco a cada llamada de función que hagas, , incluso si explícitamente afirman que no lanzarán nada.
Actualización: el compilador de Visual C++ muestra una advertencia al lanzar una función marcada con throw(). Esto es genial, pero lamentablemente, la advertencia no aparece cuando llamas a una subrutina que podría arrojar. Por ejemplo:
void f() throw(int) { throw int(13); }
void h() throw() { g(); } //no warning here!
Nunca escuché acerca de las excepciones comprobadas en C++, pero ahora sé sobre la especificación de excepciones y que a Visual C++ no le interesan mucho, eche un vistazo aquí: http://msdn.microsoft.com/ es-us/library/wfa0edys.aspx – Skurmedel
Visual C++ no lo ignora del todo ... agregar throw() al final de una función le dice a Visual C++ que puede asumir que la función no arroja, por ejemplo con fines de optimización, y si la función realmente arroja, entonces cualquier cosa puede suceder. El estándar dice que si una función está marcada, throw() sale debido a una excepción, luego std :: unexpected(), que generalmente arroja std :: bad_exception.Esto es muy diferente de "cualquier cosa puede suceder". – Doug
Si las especificaciones de excepción son pistas para los compiladores y no son requisitos para hacer algo, serían potencialmente útiles. El comportamiento estándar es, en mi opinión, inútil. –