《C++ Primer》读书笔记第五章-语句

笔记会持续更新,有错误的地方欢迎指正,谢谢!

特别简单:

1.一个表达式末尾加上分号就成了表达式语句。
2.用花括号括起来的是复合语句。
3.条件语句:
else与离它最近的尚未匹配的if匹配。建议:if和else的花括号都写上,并注意缩进。switch结束的两种情况:1.遇到break;2.到了switch的结尾。即使不在default里做任何操作,最好也要写上。
4.迭代语句:
while、for、范围for(它只能遍历所有)等。当然遍历所有比较常用,所以C++设计者搞了范围for这个语法。不允许在范围for中增删容器元素,因为会改变范围for中预存的end()值。
范围for举例:把vector的所有元素×2。

vector<int> v = {0, 1, 2, 3};
for(auto &r : v) //别忘了这里是引用,没有引用的就不会改原来容器中的值了!
{
    r *= 2;
}

5.跳转语句:break;和continue;
6.try语句块和异常处理:

异常是指存在于运行时的反常行为,而且这些行为超出了函数正常功能的范围,就是说函数无法处理了,例如失去数据库连接以及遇到意外输入等。 C++有一套异常处理机制:

throw表达式,用于异常检测,表示程序遇到了无法处理的问题,throw就是抛出异常。
try语句块,用于异常处理,try语句块以关键字try开始,并以一个或多个catch子句结束。也就是说,try语句块中代码抛出的异常会被某个catch子句处理。
一套异常类(exception class),用于在throw和catch语句之间传递异常的具体信息。

1.throw表达式

检查两条数据是不是同一本书:

if(item1.isbn() != item2.isbn())
{
 throw runtime_error("不是同一种书");
}
cout << item1 + item2;

2.try语句块

接着上面的代码处理:

while(cin >> item1 >> item2)
{
 try //若不能相加则抛异常。
 {
     if(item1.isbn() != item2.isbn())
     {
         throw runtime_error("不是同一种书");
     }
     cout << item1 + item2;
 }
 catch(runtime_error err)
 {
     cout << err.what() << "再试一次?请输入yes或者 no" << endl;//what是库里的一个函数。
     string str;
     cin >> str;
     if(!cin || str == "no") //如果没输入或者输入no,就跳出循环,结束程序。
         break;
 }
}

如果没有找到匹配的catch子句,程序会转到terminat库函数,导致程序非正常退出,即终止当前程序的执行。

总之:要做出非常鲁棒的异常处理,仅靠此知识还是不够的。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值