c++中的尝试捕获机制

fzwojiic  于 2022-12-24  发布在  其他
关注(0)|答案(1)|浏览(120)

我诚实地搜索并尝试在C++中实现try - catch机制,但失败了:我还没有足够的经验。在Android中有一种方便的方法来捕捉一般异常,无论是被零除还是数组越界,比如

int res;
int a=1;
int b=0;

try{res = a/b;}
catch(Exception e)
{
    int stop=1;
};

工作正常,程序未崩溃。
如果可能的话,你能告诉我如何在C++中做一个通用的异常拦截器吗?

t2a7ltrp

t2a7ltrp1#

对于不同的问题,C有不同的错误处理范围。
被零除和许多其他错误(空指针访问、整数溢出、数组越界)不会导致您可以捕获的异常。
您可以使用clang的undefined behavior sanitizer之类的工具来检测其中的一些,但这需要您做一些额外的工作,并且会影响性能。
C
中防止被零除的最好方法是检查它:

int res;
    int a=1;
    int b=0;

    if (b == 0)
    {
        int stop=1;
    }
    else
    {
        res = a/b;
    }

另请参见the answers to this other very similar question

相关问题