noexcept
是 C++ 中的一个关键字,用于指定函数是否可能抛出异常。
1、在函数声明中使用 noexcept
关键字,表示该函数不会抛出任何异常。如果函数确实抛出了异常,程序将调用 std::terminate
函数,并可能终止程序执行。
例如:
void myFunction() noexcept;
2、在函数定义中使用:在函数定义中使用 noexcept
关键字,表示该函数的异常规格说明。如果函数不抛出任何异常,可以使用 noexcept(true)
;如果函数可能抛出异常,可以使用 noexcept(false)
。
例如:
void myFunction() noexcept(true) {// 函数代码}
测试程序:
#include <iostream>
#include <stdexcept>
void myFunction() noexcept {
std::cout << "myFunction() is noexcept" << std::endl;
// throw std::runtime_error("myFunction An exception occurred");
}
void myFunctionWithException() {
throw std::runtime_error("An exception occurred");
}
int main() {
try {
myFunction(); // 调用 noexcept 函数
myFunctionWithException(); // 调用可能抛出异常的函数
} catch (const std::exception& e) {
std::cout << "Caught exception: " << e.what() << std::endl;
}
return 0;
}
运行结果:
./noexcept
myFunction() is noexcept
Caught exception: An exception occurred
2、如果在noexcept 抛异常,程序会挂掉
#include <iostream>
#include <stdexcept>
void myFunction() noexcept {
std::cout << "myFunction() is noexcept" << std::endl;
throw std::runtime_error("myFunction An exception occurred");
}
void myFunctionWithException() {
throw std::runtime_error("An exception occurred");
}
int main() {
try {
myFunction(); // 调用 noexcept 函数
myFunctionWithException(); // 调用可能抛出异常的函数
} catch (const std::exception& e) {
std::cout << "Caught exception: " << e.what() << std::endl;
}
return 0;
}
运行结果:
./noexcept
myFunction() is noexcept
terminate called after throwing an instance of 'std::runtime_error'
what(): myFunction An exception occurred
已放弃 (核心已转储)