《C++ Primer》【Chapter 5】

chapter5 语句

1 简单语句

表达式语句:表达式+分号

ival + 4;

2 语句作用域

定义在控制结构当中的变量只在相应语句的内部可见,一旦语句结束,变量也就超出其作用范围了

3 条件语句

3.1 if

为避免出错,一般要在if或else之后写上花括号。

  • 悬垂else(dangling else)

    else与离它最近的尚未匹配的if匹配,从而消除程序的二义性。

if (grade%10 >= 3)
		if(grade%10 > 7)
    		statement
else	//if(grade%10 > 7)匹配
  	statement2

3.2 switch

如果某个 case 标签匹配成功,将从该标签开始往后顺序执行所有 case 分支,除非程序显式地中断了这一过程 , 否则直到 switch 的结尾处才会停下来。要想避免执行后续 case 分支的代码 ,我们必须显式地告诉编译器终止执行过程。大多数情况下,在下一个 case 标签之前应该有一条break语句。

更通俗的理解就是,某个case条件满足后,从满足条件的case一直往后执行,直到结束或碰见break

如果程序的流程绕开了某个case,而后面运行的case的某个变量是在前面定义的,则会报错,所以最好是在哪个case块使用,就在哪个case块定义并初始化。

switch(flag) {
  	case true:
    		int a = 3;
		case false:
    		cout << a << endl;	//flag=false时,a并没有定义和初始化,这样肯定不对。
    //最好写成
	  case false:
    		int a = 3;
    		cout << a << endl;	//	最好就是要在哪里用就在哪里定义和初始化。
}

4 迭代语句

4.1 范围for语句

C++11的新标准

for(declaration : expression)	//	expressio 必须是一个序列
  	statement;

需要修改序列中的元素时,需要加引用

vector<int> A = {0,1,2,3,4,5,6,7};
for(auto &it:A) {
  	it *= 2;
}

4.1 do while语句

格式:

do
  statement
while(condition);	//末尾的分号不能忘记

5 跳转语句

break、continue、goto和return,goto用的少点,重点关注一下

goto语句

goto语句的作用是从goto语句无条件跳转到同一函数内的另一条语句

begin:
    int sz = A.size();
    if(sz == 6) {
        cout << sz << endl;
        goto begin;	//goto语句执行后,会销毁之前定义的sz
    }

try语句块和异常处理

在C++中异常处理包括:

  • throw表达式,异常检测部分使用throw表达式来表示它遇到了无法处理的问题。我们说throw引发(raise)了异常。
  • try语句块,异常处理部分使用try语句块处理异常。 try语句块以关键字try开始,并以一个或多个catch子句结束。try语句块中代码抛出的异常通常会被某个catch子句处理。因为 catch子句"处理"异常,所以它们也被称作异常处理代码 (exception handler)。
  • 一套异常类(exception class),用于在throw表达式和相关的catch子句之间传递异常的具体信息 。

异常中断了程序的正常流程。异常发生时,调用者请求的一部分计算可能已经完成了,另一部分则尚未完成。通常情况下, 略过部分程序意味着某些对象处理到一半就戛然而止,从而导致对象处于无效或未完成的状态,或者资源没有正常释放,等等。那些在异常发生期间正确执行了"清理"工作的程序被称作异常安全 ( exception safe )的代码 。然而经验表明,编写异常安全的代码非常困难。

异常类型只定义了一个名为what的成员函数,该函数没有任何参数,返回值是一个指向C风格字符串的const char*。该字符串的目的是提供关于异常的一些文本信息。

posted @ 2022-07-27 16:48  Dybala21  阅读(20)  评论(0编辑  收藏  举报