网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 后端开发 > C++ >

关键字noexcept

时间:2026-03-04 08:45

人气:

作者:admin

标签:

导读:c中通过throw关键字抛出异常,通过try{}catch{}捕获异常,在对应函数后添加throw()指定可以抛出的异常类型 #includelt;iostreamgt; using namespace std; struct MyException { MyException(string...

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()关键字后面可以加括号,里面写表达式,如果表达式返回值为truenoexcept(true)就有效,该函数不能向外抛异常;返回值为falsenoexcept(false)就无效,该函数就可以向外抛异常。

不带括号的noexcept相当于noexcept(true),即不会抛出异常。

noexcept(表达式)用在模板中,限制模板中的类型,但是也不常用

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
  • 指针空置类型-nullptr

    指针空置类型-nullptr

    先看一段代码: #include lt;iostreamgt; using namespace std; void func(char* p) { cout lt;lt; q...
  • 基于范围的for循环

    基于范围的for循环

    c11基于范围的for循环,语法: for (Type declaration : expression) { // 循环体 } 在上面的...
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信