C++基础知识梳理

一:类型转换
1:const_cast 去除指针或引用的const属性。
转换常量指针为非常量的指针,并且仍然指向原来的对象。
转换常量引用为非常量的引用,并且仍然指向原来的对象。
const_cast一般用户修改指针。如const int * ptr;
int array[4] = {1,2,3,4};
const int* c_ary = Ary;
int* ary2 = const_cast<int*>(c_ary);
2:static_cast
转换数据类型,类的上下行转换。
由于没有运行时类型检查来保证转换的安全性,不安全。C++的任何隐式转换都是使用static_cast来实现。
3:dynamic_cast
安全的上下行转换。
4:reinterpret_cast
进行无关类型的转换,任意引用类型的转换,指针和足够大的整型之间的转换,整型到指针的转换。
int* p = new int(5);
int p_addr = reinterpret_cast§;//将指针转换为整型,整型值和地址值相等。

二:异常处理
1:异常是指什么
– 做除法的时候除数为0;
– 用户输入时年龄为负数;
– 使用运算符动态分配空间时,空间不足导致无法分配;
–访问数组元素时,下表越界,打开文件读取时,文件不存在。
2:异常处理的基本语法
C++通过throw语句和try…catch语句实现对异常的处理。throw语句语法如下:
throw 表达式;
该语句表示抛出异常,异常是一个表达式,其值可以是一个基本类型也可以是类。
try{
语句组
}catch(异常类型){
异常处理代码
}

catch(异常类型){
异常处理代码
}

int Test() {
int m = 9,n = 0;
if (n == 0)
throw logic_error(“ERROR_divide_zero”);
else
cout << m / n << endl;
cout << “exe here” <<endl;
return 1; }

int main(int argc, const char * argv[]) {
try {
int res = Test();
cout << res << endl;
} catch (logic_error& e) {
cerr << e.what() << endl;
} }
output:ERROR_divide_zero

抛出异常后,try块立即停止执行。抛出异常之后会跳转到第一个异常类型和抛出类型匹配的catch块中执行,执行完后再跳转到最后一个catch块后面继续执行。

bad_typeid,bad_cast,bad_alloc,ios_base::failure,out_of_range都是exception的派生类。exception类是C++标准异常类。

3:异常处理的使用时机
通常情况下,使用者(包括用户、代码库的使用者)所引发的错误,需要通过异常机制来处理。因为异常发生的时候,原定的执行流程就无法继续,但对于用户来讲,他们不能因为这样的错误就终止程序的使用,所以提供给程序设计者异常机制,让设计者决定发生意外的时候应该做什么。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值