c++;visual studio 2017中未捕获异常 我无法找到一种方法来真正实现VisualStudio 2017中的C++异常处理。也许我错过了一些琐碎的事情。我搜索了很多,但没有找到解决这个简单问题的方法

c++;visual studio 2017中未捕获异常 我无法找到一种方法来真正实现VisualStudio 2017中的C++异常处理。也许我错过了一些琐碎的事情。我搜索了很多,但没有找到解决这个简单问题的方法,c++,exception-handling,visual-studio-2017,options,C++,Exception Handling,Visual Studio 2017,Options,即使是这段简单的代码也没有达到预期效果: #include <iostream> //#include <exception> int main(int argc, char *argv[]) { try { int j = 0; int i = 5 / j; std::cout << "i value = " << i << "\n"; std::cout << "this l

即使是这段简单的代码也没有达到预期效果:

#include <iostream>
//#include <exception>

int main(int argc, char *argv[])
{
  try
  {
    int j = 0;
    int i = 5 / j;

    std::cout << "i value = " << i << "\n";

    std::cout << "this line was actually reached\n";
  }
  catch (...)
  //catch (std::exception e)
  {
    std::cout << "Exception caught!\n";
    return -1;
  }

  std::cout << "Exception was NOT caught!\n";
  std::cin.get();
}
并期望catch(…)子句自动抛出并捕获nullpointer异常

作为信息,我添加了一行:

std::cout << "i value = " << i << "\n";"

在项目的属性页中,在“启用C++异常”选项中,我的值是“是(/eHSC)”,因此我认为应该启用异常。 我错过什么了吗? 先谢谢你。 安德烈

----编辑

<>我实际上发现,改变“启用C++异常”的选项,值“是的SEH异常(/EHA)”而不是“是(/EHSC)”允许捕获访问违规,并在catch(…)子句中除以零错误。 我还发现了关于这个主题的非常有用的信息,以及在对另一个线程的回复中捕捉这些类型的异常是否是一个好主意:
#包括
int main(int argc,char*argv[])
{
尝试
{
int j=0;
int i;
如果(j==0)
throw j;//您已经抛出了一些变量,或者至少为您的
//上班
std::cout
#包括
int main(int argc,char*argv[])
{
尝试
{
int j=0;
int i;
如果(j==0)
throw j;//您已经抛出了一些变量,或者至少为您的
//上班

STD::C++中的CUT< P> >“强> >代码>抛出< /Calp><强>异常,并且可以这样做,你可以<强> >代码> catch <代码> <强>它。如果你没有丢它,你就不能抓到它。

P>混淆了,有很多种错误被普遍称为“异常”。在浮点数学中尤其如此,出错的地方是“浮点异常”。它是同一个词,但是那些异常不是C++异常,并且不能可靠地捕捉到它们。
一般来说,当程序中出现了错误时,你会得到不明确的行为,也就是说,语言定义并不能告诉你程序是怎么做的。所以,你自己决定:如果你的编译器在程序将整型值除以0时记录了它的内容,那么你可以依赖于这个行为。如果没有,不要指望任何东西。C++中的

< P>您
抛出
一个异常,完成后,您可以
捕获它。如果您没有抛出它,您就无法捕获它

P>混淆了,有很多种错误被普遍称为“异常”。在浮点数学中尤其如此,出错的地方是“浮点异常”。它是同一个词,但是那些异常不是C++异常,并且不能可靠地捕捉到它们。
通常,当程序出错时,会出现未定义的行为,也就是说,语言定义不会告诉您程序做了什么。因此,您只能依靠自己:如果您的编译器记录了当程序将整数值除以0时它所做的事情,则您可以依赖该行为。如果没有,则不依赖任何操作。

除法by
0
是未定义的行为,通常不会导致异常。“当我执行这个简单的代码时,程序崩溃,就像从未捕获异常一样”您的代码不会引发异常,因此未捕获。请阅读以下内容:可能重复的除以
0
是未定义的行为,通常不会导致异常。“当我执行此简单代码时,程序崩溃,就像从未捕获异常一样”你的代码不会抛出异常,因此它没有被捕获。请阅读:HI的可能复制品,谢谢你的澄清。事实上,我对C++异常一无所知。我习惯于java和C例外,我认为一个catch(…)子句会(神奇地)。捕获了在相应的try-catch块中发生的所有冲突。您可以使用catch(…)而且,它是完全有效的,但是如果你想在运行时区分错误,你应该使用一个数据类型参数!嗨,谢谢你的澄清。事实上,我对C++异常一无所知。我习惯于java和C例外,我认为一个catch(…)子句会(神奇地)。捕获了在相应的try-catch块中发生的每一个冲突。您可以使用catch(…),它也是完全有效的!但是如果您想在运行时区分错误,您应该使用数据类型参数!
std::cout << "i value = " << i << "\n";"
this line was actually reached
Exception was NOT caught!
#include <iostream>


int main(int argc, char *argv[])
{
  try
  {
    int j = 0;
    int i ;
    if(j==0)
      throw j; // you have  throw some variable or atleast use throw for your 
               //catch to work

    std::cout << "i value = " << j/5<< "\n";

    std::cout << "this line was actually reached\n";
  }

  catch (int e) /*catch will work only if the data type of argument matches with the thrown variable's data type if it does not then the compiler's default catch will run*/
  {
    std::cout << "Exception caught!\n";
    return -1;
  }

  std::cout << "Exception was NOT caught!\n";
  std::cin.get();
}