Opcode
13-09-2010, 00:53
Mi spiace se il titolo non è molto chiaro, non sapevo veramente che metterci, solo "Exception Specification" sarebbe stato davvero troppo generico.
Comunque, ho qualche dubbio su quando siano realmente utili e quando è meglio evitarle. Online ho trovato un consiglio degli autori delle boost che consigliano di usarli nelle funzioni non inline poichè potrebbero incrementare le performance (quotazione non autorevole, trovata su un blog).
Poi, provandole su VC++ con questo esempio tutto funziona (compila senza warnings):
Class::method throw()
{
try {
}
catch (std::exception &ex) {
std::cout << ex.what();
}
}
Mentre, se congiungo uso l'exception specification su una funzione try-catch, ovvero:
Class::method() throw()
try {
}
catch (BaseException &ex) {
std::cout << ex.what();
}
il compilatore mi dà warning dicendo che una funzione che non dovrebbe sollevare eccezioni lo fà... esattamente in che modo la precedente funzione solleva una eccezione? Mi pare che semplicemente la catturi se presente, non la "rilancia" ad un contesto più ampio.
Grazie.
Comunque, ho qualche dubbio su quando siano realmente utili e quando è meglio evitarle. Online ho trovato un consiglio degli autori delle boost che consigliano di usarli nelle funzioni non inline poichè potrebbero incrementare le performance (quotazione non autorevole, trovata su un blog).
Poi, provandole su VC++ con questo esempio tutto funziona (compila senza warnings):
Class::method throw()
{
try {
}
catch (std::exception &ex) {
std::cout << ex.what();
}
}
Mentre, se congiungo uso l'exception specification su una funzione try-catch, ovvero:
Class::method() throw()
try {
}
catch (BaseException &ex) {
std::cout << ex.what();
}
il compilatore mi dà warning dicendo che una funzione che non dovrebbe sollevare eccezioni lo fà... esattamente in che modo la precedente funzione solleva una eccezione? Mi pare che semplicemente la catturi se presente, non la "rilancia" ad un contesto più ampio.
Grazie.