Sobes.tech
Middle+

Kas notiks, ja funkcijā, kas ir atzīmēta kā noexcept, notiks izņēmums?

sobes.tech AI

Atbilde no AI

Programma nekavējoties tiks pārtraukta, izsaucot std::terminate(). Tas ir standarta uzvedība, kas noteikta C++ valodā, lai apstrādātu izņēmumus, kas iziet ārpus funkcijas, kas ir deklarēta kā noexcept.

Ar šo saistītās C++ standarta sadaļas ir:

  • [except.spec] noexcept specifikācija.
  • [except.terminate] Apstrāde, izsaucot std::terminate().

Piemērs:

#include <iostream>
#include <stdexcept>
#include <cstdlib> // `std::terminate`

void f() noexcept {
    throw std::runtime_error("Notikusi kļūda noexcept funkcijā");
}

int galvenais() {
    try {
        f();
    } catch (...) {
        // Šis catch bloks netiks sasniegts
        std::cerr << "Izņēmums noķerts" << std::endl;
    }

    // Ja f() izmet izņēmumu, `std::terminate()` tiks izsaukts pirms šīs rindas
    std::cout << "Programma turpinās darbību (netiks parādīts)" << std::endl;

    return 0;
}

Šīs programmas izvade saturēs std::terminate() apstrādātāja ziņojumu, kas atkarīgs no ieviešanas, bet parasti ietver informāciju par izbeigšanas iemeslu.

tterminate called after throwing an instance of 'std::runtime_error'
  what():  Notikusi kļūda noexcept funkcijā