Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 有不同的异常类_C++_Exception - Fatal编程技术网

C++ 有不同的异常类

C++ 有不同的异常类,c++,exception,C++,Exception,我有一个关于例外的简单问题。为什么人们经常对每种类型的异常使用单独的类,是因为我们可能希望以不同的方式处理不同的异常?(与仅捕获“…”相比)。异常对象不仅仅用于指示发生了什么,因此catch(…)将是使用异常功能的一种非常原始的方法 每个异常对象通常会携带一个“有效负载”:从异常发生地到处理地的信息。当异常在展开调用堆栈中快速上升时,沿途的函数可能会截获它,用额外的信息丰富它,并将它发送到更高的位置。程序中的不同功能模块将向异常处理程序发送完全不同的信息,这就是为什么需要不同的异常类来携带该信息

我有一个关于例外的简单问题。为什么人们经常对每种类型的异常使用单独的类,是因为我们可能希望以不同的方式处理不同的异常?(与仅捕获“…”相比)。

异常对象不仅仅用于指示发生了什么,因此
catch(…)
将是使用异常功能的一种非常原始的方法

每个异常对象通常会携带一个“有效负载”:从异常发生地到处理地的信息。当异常在展开调用堆栈中快速上升时,沿途的函数可能会截获它,用额外的信息丰富它,并将它发送到更高的位置。程序中的不同功能模块将向异常处理程序发送完全不同的信息,这就是为什么需要不同的异常类来携带该信息


例如,解析器异常可能包含有关行号和语法错误性质的信息。文件系统异常可能包含有关文件名和错误代码的信息。动态内存异常可能包含有关特定内存操作和内存块大小的信息。等等要存储和携带这些完全不相关的数据集,您通常会定义不同的异常类型。

异常对象不仅仅用于指示发生了什么,因此
catch(…)
将是使用异常功能的一种非常原始的方法

每个异常对象通常会携带一个“有效负载”:从异常发生地到处理地的信息。当异常在展开调用堆栈中快速上升时,沿途的函数可能会截获它,用额外的信息丰富它,并将它发送到更高的位置。程序中的不同功能模块将向异常处理程序发送完全不同的信息,这就是为什么需要不同的异常类来携带该信息


例如,解析器异常可能包含有关行号和语法错误性质的信息。文件系统异常可能包含有关文件名和错误代码的信息。动态内存异常可能包含有关特定内存操作和内存块大小的信息。等等要存储和携带这些完全不相关的数据集,您通常会定义不同的异常类型。

除了在异常情况下提供不同的数据以及处理不同错误的不同方式外,您还可以决定在不同的位置处理它们。考虑一个函数<代码> Load FrimeCon ToMeMeMyRoo> <代码>,它可能由于文件系统错误(访问权限、文件未找到等)而引发错误,并且由于内存问题(通常是代码> STD::BADOL OLLC/<代码>)。您可能希望处理一种错误,而另一种错误不能在同一点上处理。例如,您可能希望捕获与文件相关的错误并尝试另一个文件名,而在程序的任何一点上,通常都很难处理
错误,因此,许多程序会在顶级位置捕获它,以发出错误消息并终止程序。

除了在例外情况下提供不同的数据和处理不同错误的不同方式外,您还可以决定在不同的位置处理它们。考虑一个函数<代码> Load FrimeCon ToMeMeMyRoo> <代码>,它可能由于文件系统错误(访问权限、文件未找到等)而引发错误,并且由于内存问题(通常是代码> STD::BADOL OLLC/<代码>)。您可能希望处理一种错误,而另一种错误不能在同一点上处理。例如,您可能希望捕获与文件相关的错误并尝试另一个文件名,而在程序的任何一点上,通常都很难处理
错误,许多程序在顶级位置捕捉到错误消息并终止程序。

是的……。更不用说它更容易阅读并查看您处理错误的方法。是的……。更不用说它更容易阅读并查看您处理错误的方法。好的,让我们来看看这种方法。我有一个MyException类,它继承了std::exception。然后,当我想抛出一个异常时,我会说
throw(ID\u OF\u MY\u ERROR)
——然后我对所有异常只有一个捕获,例如,
catch(MyException e)
——这种方法还不够吗?@pseuronym\u 127:如果这对你的应用程序来说足够了,那么你甚至不需要任何类。只需将
int
或枚举异常作为错误代码抛出即可。但这就像使用完整异常功能的一小部分。对于那些想要使用完整功能的人来说,这绝对是不够的。正如我所说,在许多情况下,仅仅知道错误的ID是不够的。还需要或希望了解大量关于错误上下文的附加信息@笔名:我明白了。但同样,如果您只想抛出一个错误ID,那么您可以
抛出ID\u OF\u error
。根本不需要
MyException
。好的,让我们看看这种方法。我有一个MyException类,它继承了std::exception。然后,当我想抛出一个异常时,我会说
throw(ID\u OF\u MY\u ERROR)
——然后我对所有异常只有一个捕获,例如,
catch(MyException e)
——这种方法还不够吗?@pseuronym\u 127:如果这对你的应用程序来说足够了,那么你甚至不需要任何类。只需将
int
或枚举异常作为错误代码抛出即可。但这就像使用完整异常功能的一小部分。对于那些想要使用完整功能的人来说,这绝对是不够的。正如我所说的,在许多情况下,仅仅知道是不够的