如何处理跨执行边界的libstdc ++引发异常

詹姆士

根据此页面,很多std :: string函数会在libstdc ++实现中引发异常。我无法更改libstdc ++的实现,而切换到其他库将太昂贵。我当前的目标是使我的代码大量使用std :: string符合SEI CERT C ++编码标准。我的问题是:

  1. 如何解决这个问题,使libstdc ++不会跨越执行边界?
  2. 我认为,无论我使用哪种标准库实现,都可能会遇到这个问题,因为从库中引发异常是一件常见且合理的事情。那是否意味着我将永远面对这样的问题?在实践中是那么琐碎,以至于人们真的不在乎吗,还是人们使用异常来处理错误只是一种权衡?

谢谢!

杂项

C ++编码标准已经禁止您跨执行边界传递非标准布局类型,std::string这种类型就是这种类型。例外部分不会使问题变得更糟。

通常选择的合理的解决方案是在程序中不要有“执行边界”。相反,您可以使用单个ABI和单个标准库来编译整个程序。

如果您有插件机制,通常会为该插件接口创建一个狭窄的API。在此界面上,您甚至可能坚持使用C ABI,因此插件作者不限于C ++。并且由于这是C ABI,因此请确保您的C ++异常不会被抛出该插件。std::string与您合作不是这里的问题char const*

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章