C++语句知识概要总结

语句
关于复合语句即块

一个块就是一个作用域。
所谓块,其实也就是用花括号括起来的地方,

关于悬垂else

提一下悬垂else, 其实就是,不同语言解决该问题的思路也不同,就c++而言,它规定else与离它最近的尚未匹配的if匹配。

关于switch

该语句结束要么遇到一条break语句,要么要达到该语句的结尾。

其中有case,case和它对应的值一起构成case标签。case标签必须是整型常量表达式。并且,任何两个case标签的值不能相同。
总的来说呢,对switch还是比较陌生的,就再加一个例子吧。

char s;int num = 0;
cin >> s;
switch(s){
    case 'a': case 'e': case 'i': case 'o': case 'u':
        ++num;
        break;
    default:
        cout << 'null';
        break;
}

注意最后的break, 可以不加,最好加上。

default标签,就是当上面没有任何一个case标签能匹配上的情况执行的。注意default前面不需要加case;

在switch内部定义变量时

感觉有点小繁琐,最好不要这样写就行了,很容易会出问题。

关于迭代语句,就是循环语句。

都是基础

记一下其中关于范围for语句

for(auto  c :  a)

这里c就是*a;

关于do while

先检查循环体,后检查条件,也就是说至少执行一次。

对这个比较陌生。

do {
}while();

注意最后要加分号。

关于break

有个冷知识:break语句只能出现在迭代语句或者switch内。
有就近原则;

关于continue

只能出现在loop中,不能只出现在switch内。

关于goto语句

这个就比较有意思了,书上讲了不止一遍不要使用goto语句。。😂

了解了解吧

一个例子就行了

goto end;
…
end :{}
关于try语句块和异常处理

据说处理反常行为可能是设计所有系统最难的一部分。
有三部分:

  • throw 表达式,一般都说throw引发了异常
  • try语句块
  • 一套异常类
关于throw表达式
int a, b;
cin >> a >>b;
if(a!=b){
    throw runtime_error("Date");
}
cout << a+b;
//如果程序执行到了这里,表示这a和b是相同的
cout << item1+item2 << endl;

抛出异常将终止当前函数,并把控制权转移给能处理该异常的代码。

关于try语句块

上面说到throw抛出异常之后终止当前函数,并把控制权转移,那转移到哪里去了呢?
这是try就出场了。
给出try语句块的通用语法形式:

try{
program-statements
}catch(exception-declaration){
handler-statements
}catch(exception-declaration){
handler-statements
}//…

在这里必须注意一点:try语句块内声明的变量在块外部无法访问,特别是在catch子句内也无法访问。

自己写了个简易版的例子:

int a, b;
while(cin >> a >>b){
    try{
        if(a!=b){
            throw runtime_error("ab不匹配,错误");
        }
        else {
            cout << "success" <<endl;
            break;
        }
    }
    catch(runtime_error err){
        cout << err.what()<<endl<<"是否重新输入?:y/n"<<endl;
        char c;
        cin >> c;
        if(!cin || c == 'N')
            break;
    }
}

每个标准库异常类都定义了名为what的成员函数,其用法在上述的例子里也是一目了然。

若没有定义what中的值,那么返回的值将由编译器决定。

如果最终没有找到任何匹配的catch子句,程序转到名为terminate的标准库函数。
要是根本没有任何try语句,那就是直接调用terminate

咳,据说编写异常安全的代码非常之困难,要是程序要求非常棒的异常处理,需要专门去学这个技术了。

放一下定义的异常类。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值