是否有一种“安全”的方法来声明 lippincott 函数,以便它不会在 catch 之外被调用?

mar*_*964 5 c++ exception function c++17

一个利平科特函数是一个例外转换为可以从中不支持例外,如C.这些功能其它语言的回调可安全处理返回代码的功能,因为他们故意用throw不带参数,从而重新抛出最最近捕获的异常,不能在catch块的上下文之外调用。

我想知道现代 C++(c++17 或 c++20)是否有任何声明机制来专门识别此类函数,并确保仅从catch块的上下文(或从另一个这样的上下文)调用函数函数),如果从任何其他上下文调用它,则会生成编译时错误。

120*_*arm 5

没有办法告诉编译器一个特定的函数应该只从一个catch处理程序中调用。

但是,您可以std::current_exception()从 Lippincott 函数内部调用以确定当前是否正在处理异常。如果这返回 anullptr则没有异常活动。然后,您可以在运行时通过触发断言和/或让您的函数返回(而不是使用 throw)来处理此问题。