我是一名C++程序员,习惯于OO语言,具有良好的异常处理能力.
根据我的理解,setjmp和longjmp本质上是一种传播异常条件的c风格方式.它们看起来像是一种强烈形式的goto,它可以传播堆栈.
所以,首先:在这个时间点直接使用这些是好的做法,还是被弃用了?(注意:C不是C++).
其次,它们是否在C++中有任何用处,或者我认为它们是一种遗留机制,并被C++的异常处理功能所取代?
从本质上讲,你的断言是正确的,jmp式样传播基本上与之相同goto.阅读Dijkstra(着名的和有争议的)关于gotos的论文(我认为)提供了合理的推理,为什么gotos应该很少被使用.除非你确切知道为什么要做你正在做的事情(或者你在非常特定的领域工作 - 例如嵌入式编程),否则你不应该触摸goto或者longjmp.
它们用于实现协同程序.网上运行着几个c ++协程库,在Unix/Linux中将用于setjmp/longjmp实现该功能.
因此,如果你的目标是实现一个协程库,那么如果它的良好实践与否则它是一个没有实际意义的点,因为在这些平台上它是支持该功能的唯一方法.
如果你的目标是使用协程库,你应该搜索其中一些.甚至还有一个名为boost :: context的提升保险库提案已获批准.
| 归档时间: |
|
| 查看次数: |
3746 次 |
| 最近记录: |