总结
可以看到今天的C++标准所定义的异常处理机制,在性能方面是容易引起问题的,主要是由于其运行时开销的不确定性引起的。最近有一份C++标准提案(P0709)旨在引入一种零开销,静态的异常处理机制,它的未来发展值得关注。
不得不说,在Qt编程上,对于目前基于表格的异常处理机制的性能权衡是至关重要。如果没有异常抛出,是零开销的;但如果抛出异常,则意味着巨大的开销(一份研究表明这个开销的量级为1000~2000个CPU时钟周期),只有当异常是偶发的情况下,加入异常处理才是可以接受的。所以,对初学者的通常建议是:不要在循环中使用异常处理!
至于RTTI,我们必须注意其开销的不可预测。谨慎起见,在可行的情况下,建议把所有dynamic_cast<>的使用替换成一个虚函数。
网友评论