关键字noexcept _
2026/7/2 2:13:29 网站建设 项目流程

c++中通过throw关键字抛出异常,通过try{}catch{}捕获异常,在对应函数后添加throw()指定可以抛出的异常类型

#include<iostream> using namespace std; struct MyException { MyException(string str) : msg(str) {} string msg; }; void func() throw(int ,double,MyException){ // throw(int, double, MyException)该函数只允许抛出指定类型的异常 windows中只警告,但是linux中报错 // 如果throw() 括号中什么都没有,就是这个函数不允许抛出异常 // 不写throw(...)是指这个函数可以抛出任意类型的异常 try { //throw 1; throw MyException("string exception!"); } catch (int e) { cout << "throw value: " << e << endl; } catch (MyException e) { cout << "Myexpection:" << e.msg << endl; } } int main() { func(); system("pause"); return 0; }

就如上面代码中的例子:func()函数中抛出异常并且捕获,func被限制只能抛出int,double,MyException类型的异常。

throw(int, double, MyException)该函数只允许抛出指定类型的异常 在windows中只警告,但是linux中报错

如果throw()括号中什么都没有,就是这个函数不允许抛出异常

不写throw(...)是指这个函数可以抛出任意类型的异常

C++11新增了noexcept关键字

#include<iostream> using namespace std; struct MyException { MyException(string str) : msg(str) {} string msg; }; void func() noexcept(true){ // 在c++11中使用noexcept代替throw()表示这个函数不允许抛出异常,需要抛出异常只需要去掉关键字noexcept即可 // noexcept()关键字后面可以加括号,里面写表达式,如果表达式返回值为true:noexcept就有效,该函数不能向外抛异常;返回值为false:noexcept就无效,该函数就可以向外抛异常 //throw 1; throw MyException("string exception!"); } int main() { try { func(); } catch (int e) { cout << "throw value: " << e << endl; } catch (MyException e) { cout << "Myexpection:" << e.msg << endl; } system("pause"); return 0; }

就如上面的例子:在函数func()后面添加noexcept限制该函数向外不能抛出异常

noexcept()关键字后面可以加括号,里面写表达式,如果表达式返回值为true

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询