gpt4 book ai didi

c++ - 为什么重新抛出异常会丢弃 'what()' 给出的信息?

转载 作者:行者123 更新时间:2023-11-28 05:06:32 25 4
gpt4 key购买 nike

我在 Windows 10 上使用 MinGW gcc(或 g++)7.1.0。

通常,抛出 std::runtime_error 会显示如下信息:

terminate called after throwing an instance of 'std::runtime_error'
what(): MESSAGE

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

但是下面的代码只显示了最后两行,what()信息丢失了:

#include <stdexcept>

using namespace std;

int main() {
try {
throw runtime_error("MESSAGE");
} catch (...) {
throw;
}
}

所以上面的代码只输出:

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

如果我将 ... 替换为 const exception&const runtime_error&(或者没有 const,没有 &,或两者都没有)。

据我所知,throw; 重新抛出当前捕获的异常。那么为什么不显示 what() 呢?

最佳答案

是什么让您认为重新抛出异常会丢弃“what()”提供的信息?您永远不会检查 what() 在重新抛出后返回什么。 This application has requested... 显示消息是因为您未捕获的异常导致程序终止。 what() 内容不应自动打印。

你可以毫无问题地打印what()返回的值:

#include <stdexcept>
#include <iostream>

int main()
{
try
{
try
{
throw ::std::runtime_error("MESSAGE");
}
catch (...)
{
throw;
}
}
catch(::std::exception const & exception)
{
::std::cout << exception.what() << ::std::endl;
}
}

关于c++ - 为什么重新抛出异常会丢弃 'what()' 给出的信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44613378/

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