C++异常和C++11标准

异常

异常概念:程序中可预料但无法避免的错误
异常处理概念:从发生异常的地方开始终止,不再进行正常的流程,去转而执行特定的异常处理流程
关键字:
try: try块,受监控的代码块,它来捕获产生的异常。可以有多个try块,不同的try块监视不同的区域
catch: catch块,紧跟在try块后,且必须成对出现,可以有多个catch块(这点有点类似switch和case)它用来得到并处理try捕获的异常
throw: throw块,主动抛出某个表达式值类型的异常,如果当前没有try块监控,那沿调用链往上级抛该异常
抛出的表达式是什么类型,就由什么参数类型的catch接收并处理.

void Fun()
{	
	int n;
	cin>>n;
	if(n==0)
	throw "zero";//如果输入0,这里抛出的异常将会向上级抛出,即抛到main函数中
	try{    //监控花括号内的全部内容
		if(n>20)
			throw "overstep";//这里抛出的异常会有try接收,有这里的try后的catch处理
		if(n<0)
		{
			throw n;
		}
		else
		throw 1.23;
	}
	catch(int n)
		cout<<"fun--"<<n<<endl
	catch(char * str)
		cout<<"fun--"<<str<<endl;
	catch(...)
		cout<<"fun--"<<"..."<<endl;
}

int main()
{	
	try {
	Fun();
	}
	catch(char * str)
		cout<<"main-"<<str<<endl;
	catsh(...)
		cout<<"main--"<<"..."<<endl;
}
/*
	输入0:输出”main--zero“
	输入大于20:输出”fun--overstep“
	输入其他:输出”fun--...“
	输入小于0:输出”fun--n“(n为输入的值)
*/

C++11标准

这里只选择10个经典的较为常见的几个来说

1.数据初始化列表

//旧:
int a=0;
int b(1.1);
//新
int a={0};
int b={(int)1.1};//不能有精度的缺失 

2.空指针

//旧:
int *p=NULL;
//新:
int *p=nullptr;

3.自动类型

//旧:
int a=1;
//新:
auto a=1;
auto b=2.1;
//自动识别推导类型

4.decltype

int a=1;
decltype(a)b;//将a的类型给b做类型声明
b=2;

5.新的for循环规则

//旧的:
char * p= "abcd";
for(int i=0;i<4;++i)
{
	cout<<p[i]<<endl;
}
//新的:
std::string srcstr="abcd";
for(auto c:srcstr)//迭代器,新方法
cout<<c<<endl;

6.类型重定义

typedef int I;
//新的:
using I = int;

7.default在类中的用法

class CA
{
public:
	CA()
	{
		//旧方法
	}
	CA();
}
CA::CA()=default;//新方法,提醒系统用默认的构造函数

8.类中初始化数据成员

class CA
{
public:
	int a=10;//类似于函数缺省的作用,如果有构造函数赋值,会替代这里的初始化。
}

9.构造函数委托

class CA
{
public:
	int a;
	CA(int a){this->a=a;}
	CA():CA(1){}
}

10.禁止虚函数重写

class CA
{
public:
	virtual void fun()final;//final关键字,如果有类继承与CA在子类中,语法限定不能重写fun函数	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值