c – 在单个函数中混合’__try’和’try’ – 通过Lambda
发布时间:2020-12-16 07:13:26 所属栏目:百科 来源:网络整理
导读:众所周知,Windows SEH不支持C异常处理机制.我们不能在单个函数中使用try和__try.这将导致编译器错误: __try{ try { MayThrowCPPException_OR_SEH(); } catch(...) { }}__except(EXCEPTION_EXECUTE_HANDLER){} 它将呈现: C2713: Only one form of exception
众所周知,Windows SEH不支持C异常处理机制.我们不能在单个函数中使用try和__try.这将导致编译器错误:
__try { try { MayThrowCPPException_OR_SEH(); } catch(...) { } } __except(EXCEPTION_EXECUTE_HANDLER) { } 它将呈现:
大多数人不喜欢的一个选项是“是的SEH Exceptions(/ EHa)”编译器选项.这将有助于C try / catch处理这两个异常.我们需要将这个函数放在单独的文件中,并且只为该源文件放入/ EHa. 另一种选择是将try(或__try)放在一个函数中,并使用另一个函数__try(或try). 问题开始了 auto call_this =[] { MayThrowCPPException_OR_SEH(); // C++ exception handling here. }; __try { call_this(); } __except(...) { } 这在VC 2013更新5上编译好. 这样做是否安全? 解决方法
是的,这是安全的. lambda主体只是一个未命名的lambda类型的operator()方法.此方法具有C异常处理程序.外部函数具有SEH处理程序.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |