Prediga la salida del siguiente programa C++.
C++
#include <iostream> using namespace std; int main() { try { throw 'x'; } catch(int x) { cout << " Caught int " << x; } catch(...) { cout << "Default catch block"; } }
Producción:
Default catch block
En el programa anterior, se lanza un carácter ‘x’ y hay un bloque catch para capturar un int. Uno podría pensar que el bloque catch int podría coincidir considerando el valor ASCII de ‘x’. Pero tales conversiones no se realizan para bloques catch. Considere el siguiente programa como otro ejemplo en el que no se llama al constructor de conversión para el objeto lanzado.
C++
#include <iostream> using namespace std; class MyExcept1 {}; class MyExcept2 { public: // Conversion constructor MyExcept2 (const MyExcept1 &e ) { cout << "Conversion constructor called"; } }; int main() { try { MyExcept1 myexp1; throw myexp1; } catch(MyExcept2 e2) { cout << "Caught MyExcept2 " << endl; } catch(...) { cout << " Default catch block " << endl; } return 0; }
Producción:
Default catch block
Como nota al margen, los objetos de tipo derivado se convierten en tipo base cuando se lanza un objeto derivado y hay un bloque catch para capturar el tipo base. Consulte este GFact para obtener más detalles.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA