C++ 异常处理:从 set jump 到 C++ 异常
1. set jump 异常
set jump 异常可视为 C 风格的异常。与 C++ 风格的异常类似,它能让用户在代码中设置一个出错时返回的位置,还提供了生成执行跳转异常的方法。
以下是一个示例代码:
#include <cstring>
#include <csetjmp>
#include <iostream>
std::jmp_buf jb;
void myfunc(int val)
{
if (val == 42) {
errno = EINVAL; // Invalid argument
std::longjmp(jb, -42);
}
}
int main()
{
if (setjmp(jb) == -42) {
std::cout << "failure: " << strerror(errno) << '\n';
std::exit(EXIT_FAILURE);
}
myfunc(1);
std::cout << "success\n";
myfunc(42);
std::cout << "success\n";
}
在这个例子中, myfunc() 函数不返回错误码,而是执行长跳转,就像 goto 一样,跳转到调用栈中最后一次调
超级会员免费看
订阅专栏 解锁全文
2万+

被折叠的 条评论
为什么被折叠?



