异常处理 - 何时使用带有try-catch块的throw关键字

时间:2017-05-13 14:59:41

标签: exception exception-handling

我想了解如何在没有throw关键字的情况下运行以下程序,何时应该使用throw with try-catch块。

#include <iostream>
#include <exception>
using namespace std;

int main () {
try{
long double * arr= new long double[1500000000000000000000000000000000000];
cout<<"hello,This is an exception handling program"<<endl;
//throw exception();
}
catch (exception& e){
cout << "Standard exception: " << e.what() << endl;
}
return 0;
}

Output
Standard exception: std::bad_array_new_length

1 个答案:

答案 0 :(得分:1)

你不需要为try catch工作扔东西;看看这些链接。此问题也在这里被多次提出并回答。

https://msdn.microsoft.com/en-us/library/hh279678.aspx

https://msdn.microsoft.com/en-us/library/6dekhbbc.aspx

以下链接将为您提供相当不错的解释。

How to throw a C++ exception

如果你真的花时间去浏览那些你已经看到过的一些例子显示使用了一个投掷,而其他的没有。所以回归基础。

try
{
    //throw something;
}
catch(...)
{
    //do something
}

以上snipet代码代表了以下想法。

如果您的代码可能会导致异常,则应将代码放在try块中。

如果发生异常,catch部分会捕获异常。

您将创建自己的异常处理类或使用其他人。这与你正在使用的相关。

这个想法非常简单;尝试这样做,如果它导致异常捕获它,并执行此操作,以便我的程序不会崩溃。

那么,什么是投掷,为什么我不需要?

抛出语句是你直接抛出异常。故事期末。想想这样。您有一个分割两个数字的功能,数字基于用户输入。如果用户输入两个数字,其中一个为0,另一个为25。

由于数学原因,它会导致异常....然后你可以预料到并将该除法抛出零,以防止致命的崩溃。

必须发生异常才能被捕获。例外可以是您想要的任何内容,也可以是您不想要的内容。

我的意思是说你可以抛出你创建的仅适用于你的程序的东西。

你问,为什么这个代码会在抛出的情况下运行?

try catch块不需要发生异常。如果发生异常,则无论您是否抛出它都会发生。因此try catch块不需要抛出。

例如。

try
{

}
catch(...) // This is a real thing. It's meant to catch everything but don't use it becasue it's bad.
{

}


try 
{
  throw("An exception happened")
}
catch(...)
{
  cout << "Nothing actually happened" <<endl; // This block is valid..
}

重要提示:我不是告诉你不要使用投掷。我只是回答你的问题并解释为什么你不需要一个试试赶上来运行。