在C++中,是否可以强制用户捕获异常?

nap*_*con 6 c++ exception-handling exception c++11

简而言之,是否有可能让C++强制一个方法的调用者放一个try ... catch块?

(澄清一下:我并不一定意味着直接调用者,我的意思是强迫它被捕获到某个地方.而且,我正在谈论在编译时强制执行.)

长:

我已经读过,不建议使用异常规范,并且无论如何它都无法正常工作(http://4thmouse.com/mystuff/articles/UsingExceptionsEffectively.html)

但普遍的共识似乎倾向于使用异常来返回写入返回错误代码的方法的用户的错误.

所以,如果我正在写一个库,那么什么是阻止用户调用我的方法而不放任何try ... catch块,然后当我的代码抛出异常时让他的程序崩溃?

(要明确的是,我只需要在用户堆栈中的某处捕获异常,不一定在立即调用代码中,并且如果不是这样,编译器会抱怨.)

Nic*_*las 10

不它不是.

实际上,没有任何机制可以强制函数的调用者(调用堆栈中的任何地方)处理任何类型的错误.至少,不是通过编译失败.可以丢弃返回值.expected<T, E>如果用户在获取之前没有实际检查该值是否可用,即使使用返回值(via )捆绑错误代码也不会发出编译时错误.

C++ 17可以为我们提供[[nodiscard]]属性,如果调用者丢弃了返回值(可能是错误代码),它允许编译器发出警告.但编译时警告将尽可能接近.