suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Über Ausnahmen in C++?

  1. Gibt es einen wesentlichen Unterschied zwischen den durch normales Debuggen generierten Ausnahmen (wie im Bild gezeigt) und den Try-Throw-Ausnahmen, mit denen beurteilt wird, ob die Eingabe des Benutzers korrekt ist oder nicht? Mit anderen Worten: Funktioniert der Ausnahmemechanismus? C++ beinhaltet Ersteres, oder ist es nur Letzteres?

Wonach wird die erste oben erwähnte Ausnahme beurteilt? Beispielsweise wird die Zugriffsverletzung im Bild vom Compiler oder anderen Tools der IDE beurteilt?

给我你的怀抱给我你的怀抱2702 Tage vor1130

Antworte allen(3)Ich werde antworten

  • phpcn_u1582

    phpcn_u15822017-06-30 09:59:21

    @依云 说的有道理,我做个补充

    • c++的异常只能捕获由c++抛出的异常。简单来说,即它只能catch它自己(不限于你写的代码,还包括运行库)throw的异常。

    • 实际上c++抛出的异常并不算真正的异常,因为他只是被定义的,可预知的。真正的异常只有执行过后才被cpu触发,即硬件抛出的异常。

    • 硬件不会直接理会c++,它会交给操作系统去处理。鉴于操作系统的不同,对异常的处理也是不一致的————但他们都不会交给上层语言。

    • 以相对完善的windows异常处理为例,它会

    1. 交给调试器(进程必须被调试)

    2. 执行VEH

    3. 执行SEH

    4. TopLevelEH(进程被调试时不会被执行)

    5. 交给调试器(上面的异常处理都说处理不了,就再次交给调试器)

    6. 调用异常端口通知csrss.exe

    Antwort
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-06-30 09:59:21

    内存读取违例,是由硬件判断,然后交由操作系统处理的。(我不太懂 C++,不过这不像是 C++ 的异常,而是 Windows 抛出来的异常。)

    Antwort
    0
  • 怪我咯

    怪我咯2017-06-30 09:59:21

    没有get到你的点,有些库里就自带的异常类,也可以自定义异常类,最终都继承自std::exception,本质上没啥区别。还有就是这个是运行时的异常,和编译器还有ide无关。

    Antwort
    0
  • StornierenAntwort