我在一些地方读到过,引发异常的代价可能很高。我有一个异常(exception),我希望它会以一定的频率发生,我每次都会捕获它。这可能是一个天真的问题(像许多人一样,我迟到了异常游戏):
我能否创建一个我的异常的静态全局实例,并在它出现时抛出
它(仅来自一个方法),每次都捕获它?
这甚至可以节省我的时间吗?或者因为我希望以某种频率抛出,只会从这个方法中抛出这个异常(目前),并且总是会捕获这个异常,这是否表明我应该使用其他范例来处理这种情况?
感谢任何有帮助的回答!
最佳答案
异常是按值抛出的,而不是按引用抛出的,所以简单地手头有一个异常类的实例是无济于事的。
但是,有可能 rethrow_exception
(它需要一个 exception_ptr
作为参数)可能更有效,在某些给定系统上使用一些给定的编译器和选项。您必须测量才能确定这一点。
值得注意的是,对于大多数(全部?)C++ 实现,异常机制针对很少抛出异常的代码进行了优化。因此,执行通过 try
block 等大部分是免费的,没有成本。但是 throw 的 Action 可能代价高昂。所以是的,如果可以的话,无论任务是什么,都要考虑一些其他的“范例”。例如,您可能会返回一个 1 boost::optional<T>
,就像一个盒子,要么包含一个对象,要么什么都不包含。
<支持>
1 如果你想避免对 Boost 的依赖,那么一个 Optional
POD 类型的类实现起来很简单,对于非 POD,可以利用 std::vector
作为对象载体,以可能的动态分配为代价。
关于c++ - 我可以有一个异常的静态全局实例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35121946/