有没有大神能解决我心中的疑惑: C++ 的 try catch 是怎么实现的?

2018-03-09 15:31:25 +08:00
 tailf
C++ 编译之后直接成为二进制,而图灵机只能按照顺序一个指令一个指令地执行,那么 try catch 是怎么实现的呢?

解释型语言的 try catch 好理解,但是 C++ 的真的想不通。
2641 次点击
所在节点    问与答
9 条回复
ipwx
2018-03-09 15:41:06 +08:00
longjmp?
innoink
2018-03-09 15:48:41 +08:00
这和图灵机有什么关系,哪个语言不是图灵机?
dandycheung
2018-03-09 15:52:21 +08:00
这么复杂的专业领域知识,为什么不先去读读相关著作再来提问呢?
htfy96
2018-03-09 15:55:15 +08:00
没有规定实现,不过可以看看 http://itanium-cxx-abi.github.io/cxx-abi/abi-eh.html#cxx-abi 的 2.4/2.5
NagisaFurukawa
2018-03-09 15:59:32 +08:00
SEH 了解一下
ysc3839
2018-03-09 16:29:13 +08:00
编译后逆向看看就知道了。不同编译器可能有不同实现的。
gnaggnoyil
2018-03-09 17:42:22 +08:00
C++的代码和具体的机器指令又没有必然的联系."高层抽象"了解一下.首先 C 和 C++就不保证一定是 1.编译的 2.编译目标是机器指令.其次 C++的 implementation 完全可以自己插入需要的代码来获得符合要求的实现:RAII 不就是这样做的吗.POSIX 和 MINGW 的 GCC 以及 POSIX 下的 Clang 有两种异常的实现:SJLJ 和 Dwarf.Windows 下的 MSVC 和 Clang-cl 对异常的实现则是 Windows 的 SEH.不同异常的实现属于这个实现的 C++ ABI 的一部分,所以即使是同一个平台下的同一个 implementation,如果其对异常处理的实现不同的话一般情况下也是不能保证其 ABI 是互相兼容的.特别是 SJLJ,Dwarf 和 SEH 这三者两两之间 ABI 互不兼容.
julyclyde
2018-03-10 11:48:34 +08:00
要抱着孤立和分层的观点看问题
并不是每两个事务之间都有直接关系
tailf
2018-03-13 11:27:47 +08:00
学习了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/436566

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX