C++;-不理解try catch中catch函数的语法 我一直在学习C++中的代码>尝试catch < /Cord>块,我不理解代码< catch catch >代码>函数的语法。关于CPP参考,它说:

C++;-不理解try catch中catch函数的语法 我一直在学习C++中的代码>尝试catch < /Cord>块,我不理解代码< catch catch >代码>函数的语法。关于CPP参考,它说:,c++,exception,exception-handling,C++,Exception,Exception Handling,1) 要在catch子句中声明形式参数,请执行以下操作: catch (const std::exception& e) { /* */ } 2) 要声明未命名的参数,请执行以下操作: catch (const std::exception&) { /* */ } 3) 要编写针对任何异常激活的“捕获所有处理程序”(不确定这是什么意思),请执行以下操作: catch (...) { /* */ } 问题: 1) 这些catch块之间有什么区别?我不确定一个正式参数、一个未命

1) 要在catch子句中声明形式参数,请执行以下操作:

catch (const std::exception& e) { /* */ }
2) 要声明未命名的参数,请执行以下操作:

catch (const std::exception&) { /* */ }
3) 要编写针对任何异常激活的“捕获所有处理程序”(不确定这是什么意思),请执行以下操作:

catch (...) { /* */ }
问题:

1) 这些
catch
块之间有什么区别?我不确定一个正式参数、一个未命名参数和一个“catch all handler”有什么不同

2)
catch
子句的参数
e
是什么类型?它是否属于
异常类型
?除了在如何编写
try catch
块的示例中,我从未见过使用这种类型。如果是这样,我如何在
catch
子句中使用它来输出错误消息?当我抛出错误时,
e
能接受我发送的字符串吗

3) 我已经试验并编写了一个
try-catch
块,如下所示:

#include <iostream>
#include <string>
#include <stdexcept>

try
{
    throw invalid_argument("Error, program stopped.");
}

catch(const string& e)
{
    cout << e;
}
#包括
#包括
#包括
尝试
{
抛出无效的_参数(“错误,程序已停止”);
}
捕获(常量字符串和e)
{
库特
如果希望能够访问catch块中的异常对象,则需要使用命名异常。例如,如果希望打印
e.what()

如果不需要访问异常对象,则可以使用未命名的异常。可能您不关心异常的内容,只想以相同的方式处理(此类型的)所有异常

catch (...) { /* */ }
C++允许您抛出任何类型的对象,无论它是否是从
std::exception
派生的类型。这种类型的catch块将捕获抛出的任何对象。就像未命名的异常一样,您将无法访问抛出的对象。而且,您甚至无法知道它是什么类型


在最后一个示例中,我认为打印消息的不是您的catch块。毕竟,您捕获的类型是错误的。一些编译器将自动插入异常捕获代码,以捕获从main转义的任何内容,如果它是从
std::exception
派生的类型,它将打印
what()
,然后终止程序。我相信GCC会这样做,但Visual Studio不会。不确定Clang或任何其他编译器。

谢谢-我将代码更改为使用“exception”而不是“string”作为catch参数,然后使用e.what()能够访问我发送给catch的字符串文本。我使用GCC,因此程序使用我的旧代码运行是有意义的。
catch (const std::exception&) { /* */ }
catch (...) { /* */ }