Actualmente estoy usando Visual Studio Express C++ 2008 y tengo algunas preguntas sobre la captura de pedidos de bloques. Lamentablemente, no pude encontrar la respuesta en Internet, por lo que planteo estas preguntas a los expertos.Preguntas sobre el orden de las declaraciones de captura en el bloque catch - compilador específico o estándar de lenguaje?
Noté que a menos que la captura (...) se coloque al final de un bloque catch, la compilación fallará con el error C2311. Por ejemplo, la siguiente sería compilar:
catch (MyException)
{
}
catch (...)
{
}
mientras que el siguiente no lo haría:
catch (...)
{
}
catch (MyException)
{
}
a. ¿Podría preguntar si esto está definido en el estándar de lenguaje C++, o si esto es solo el compilador de Microsoft siendo estricto?
b. Do C# y Java también tienen las mismas reglas?
c. Como un lado, también he intentado hacer una clase base y una clase derivada, y poner la instrucción catch para la clase base antes de la instrucción catch para la clase derivada. Esto compilado sin problemas. ¿No hay normas lingüísticas que protejan contra dicha práctica, por favor?
Re (B): la sección 8.10 de la especificación C# proporciona una descripción detallada de cómo funciona esto en C#. Véalo para más detalles. Re (C) que es ilegal en C#. Ver la sección 8.10 para más detalles. –