gpt4 book ai didi

c++ - Expat 解析器 - C++ - 异常处理

转载 作者:太空宇宙 更新时间:2023-11-04 14:20:42 25 4
gpt4 key购买 nike

我已经用 expat 解析器注册了三个处理程序:- 开始-结尾- 文字

然后从主程序中,我读取了 xml 文件,对其进行缓冲并调用 XML_Parse API。像这样:

try {
if( ! XML_Parse (....))
{
// throw user-defined expection here
}
catch(...)
{
}
} // end of try
catch(...)
{
}

如果 XML_Parse 在失败时返回 0,则会从 if 内部抛出异常。它被捕获在内部捕获 block 中。

这是我的问题:如果在解析过程中从任何处理程序抛出用户定义的异常,是否会在外部 catch 中捕获?

如果是,它实际上没有发生在我的代码中。相反,它正在转储核心,堆栈显示 throw 导致 std:terminate。在从 HANDLERS 抛出异常之前,我是否必须执行任何其他操作。

谢谢。

最佳答案

您在 trycatch 之间存在不匹配:每个 try block 后跟至少一个 catch block ,但你只有一个 try。可能是这样的:

try
{
// stuff before

try
{
if (!parse())
{
// ...
}
}

// further catch blocks?

catch(...)
{
// may rethrow
}

// stuff after
}

请注意,匿名 catch(...) 通常不是很好的设计 - 您要么知道自己期望并可以处理什么,要么不需要捕获它。匿名捕获唯一有用的事情是记录异常并重新抛出它。

关于c++ - Expat 解析器 - C++ - 异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7915906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com