当没有抛出任何东西时,带有try-catch的代码仍然很慢

时间:2014-05-28 20:20:46

标签: c++ performance exception try-catch

众所周知,异常是很好的特征,但它们很慢。因此,使用返回标志是一种好习惯。现在如果我使用返回标志,但是以防万一我将代码包装在try-catch中,以便100%确定它会在异常情况下无效。我的意思是我的代码主要用于标志,而不是基于异常处理。现在这是一个好习惯吗?它的速度慢吗?

1 个答案:

答案 0 :(得分:1)

答案是,在各种编译器,语言和技术中,try-catch(或类似)在没有发生任何例外情况时的性能成本很低,应予以忽视。

原因是(通常)所有try确实是以特定方式标记堆栈,这是一个廉价的操作。引发异常时是工作完成的时间。然后系统必须扫描堆栈以查找catch块,这可能很昂贵。

这也适用于像try-catch-finally这样的结构(在拥有它的语言中)。 finally块只是通过正常的控制转移来执行。

这是一个相当通用的答案,具体的编译器可能表现不同,但原则仍然存在:try便宜并且提出异常是昂贵的。每当您的设计需要时,请随意使用try块,而不必担心性能影响。