Originariamente inviato da shodan
nel qual caso il compilatore si fida e non genera il codice per gestire la cosa. Se però nella funzione qualcosa genera un'eccezione, il comportamento è indefinito (presumo; non ho lo standard sotto mano. In genere viene chiamata abort(), ma credo dipendenda dall'implementazione).
Se non erro viene garantito che verrà chiamato std::terminate, e per questo pare che comunque non si guadagni molto in prestazioni con i throw() vuoti, visto che comunque il compilatore alla fine fa:
codice:
try
{
    // tutto il codice della funzione
}
catch(...)
{
    std::terminate();
}
Il concetto di fondo degli specificatori di eccezioni credo che sia una cosa tipo la const-correctness, non tanto per aiutare il compilatore ma per dare garanzie al programmatore.
In genere se una funzione genera un'eccezione, la cosa è documentata.Se è una funzione dello standard, la catturi con un generico catch (const std::exception& e) altrimenti occorre la documentazione.
In linea di massima per fortuna la maggior parte delle librerie fa ereditare la propria gerarchia di eccezioni da std::exception per evitare casini.