Conclusion

We see that exceptions, as they are defined today in C++, are problematic performance-wise, mainly due to their unpredictable runtime costs. Recently, there was even a C++ standard proposal (P0709) for adding zero-overhead, static, exception-handling mechanisms to C++, so the future developments here will definitely be interesting to watch.

Having said that, in Qt programming, the trade-off the modern table-based exception implementations make, that is, zero overhead when no exception is thrown and big overhead (reported to be in the order of 1000-2000 CPU cycles in one study) when it is, is acceptable given that the exceptions occur very infrequently. Hence, the usual advice given to beginners is: don't use exceptions to break out of the loop!

As for RTTI, we have to be wary of its unpredictable costs. So, be forewarned. The best thing you could do is to replace dynamic_cast<> usage with a virtual function, if you can.