相关疑难解决方法(0)

如何知道导致异常的确切代码行?

如果我自己生成异常,我可以在异常中包含任何信息:源文件的许多代码行和名称.像这样的东西:

throw std::exception("myFile.cpp:255");
Run Code Online (Sandbox Code Playgroud)

但是未处理的异常或不是由我生成的异常是什么?

c++ exception

34
推荐指数
5
解决办法
3万
查看次数

为什么C++不使用std :: nested_exception来允许从析构函数中抛出?

从析构函数抛出异常的主要问题是,在析构函数被调用的那一刻,另一个异常可能是"在飞行中"(std::uncaught_exception() == true),因此在这种情况下做什么并不明显.用新的"覆盖"旧的异常将是处理这种情况的可能方法之一.但是决定在这种情况下必须调用std::terminate(或其他std::terminate_handler).

C++ 11通过std::nested_exception类引入了嵌套异常功能.该特征可用于解决上述问题.旧(未捕获)异常可能只是嵌套到新异常中(反之亦然?)然后可能抛出嵌套异常.但是没有使用这个想法.std::terminate在C++ 11和C++ 14中仍然会出现这种情况.

所以问题.是否考虑过嵌套异常的想法?它有什么问题吗?是不是在C++ 17中会改变这种情况?

c++ exception-handling exception nested-exceptions c++11

16
推荐指数
2
解决办法
5113
查看次数