Middle+
რა მოხდება, თუ noexcept-ით აღნიშნულ ფუნქციაში გამონაკლისი მოხდება?
sobes.tech AI
პასუხი AI-სგან
Ծրագիրը անմիջապես կավարտվի std::terminate() կանչով։ Սա ստանդարտ վարքագիծ է, որը սահմանված է C++-ում noexcept-ով հայտարարած ֆունկցիայի արտահայտությունից դուրս արտահայտվող արտահայտությունների համար։
Այս թեմայի հետ կապված C++ ստանդարտի համապատասխան բաժիններն են՝
- [except.spec]
noexceptսահմանումը։ - [except.terminate] Հաշվարկը
std::terminate()-ի միջոցով։
Օրինակ՝
#include <iostream>
#include <stdexcept>
#include <cstdlib> // `std::terminate`-ի համար
void f() noexcept {
throw std::runtime_error("Սխալ է տեղի ունեցել `noexcept` ֆունկցիայում");
}
int main() {
try {
f();
} catch (...) {
// Այս catch-բլոկը չի հասնի
std::cerr << "Արտահայտություն բռնվեց" << std::endl;
}
// Եթե f() արտահայտի արտահայտություն, `std::terminate()`-ը կկոչվի այս կետից առաջ
std::cout << "Ծրագիրը շարունակվում է (չի ցուցադրվելու)" << std::endl;
return 0;
}
Այս ծրագրի ելքը կպարունակի std::terminate()-ի մշակողի հաղորդագրությունը, որը կարող է կախված լինել իրականացմանից, բայց սովորաբար պարունակում է ավարտի պատճառի մասին տեղեկություններ։
terminate called after throwing an instance of 'std::runtime_error'
what(): `noexcept` ֆունկցիայում սխալ է տեղի ունեցել