欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

(笔记—C++ Primer) 第五章 语句

程序员文章站 2024-03-11 11:54:07
...

1. 简单语句

  • 表达式语句: 表达式加分号
  • 空语句:只含有一个分号,当语法上需要一个语句,但逻辑上不需要时使用;
    • 使用空语句时应该加注释,表明语句是可以省略的;
    • 多余的空语句可能会造成危害:如在while(true);cout<<i;cout<<i;不再处于循环体中;
  • 复合语句(块):用花括号{}包含多条语句和声明的序列; 块限定了变量的作用域;
    • 在程序中,语法上只需要一条语句,逻辑上需要多条语句,此时用块;

2. 语句作用域

  • 可以在if, switch, for , while等控制结构中定义变量,但定义的变量只能在相应的语句内部可见;
#include <iostream>
int main()
{
    while (int i = get_num())
        cout << i <<endl;
    i = 0;      //wrong! 无法访问i
    return 0;
}

3. 条件语句

3.1 if语句

if(conditionn)
    statement1
else
    statement2
  • 注意使用花括号,避免语句被无条件执行
  • 悬垂else: 当存在多个if...else...嵌套时,if分支可能会多于else分支;在C++中,规定else与最近的一个未匹配的if匹配;
  • 为获得想要的匹配方式,使用花括号控制执行路径;

3.2 switch语句

switch(option)
{
    case 1 :  break;
    case 2 :  break;
    default: 
}
  • option 表达式 将会转换成整数类型与case标签比较
  • case标签必须是整型常量,而且不得含有两个相同的标签;
  • 如果某个case匹配成功,将顺序执行后面的左右case分支,因此,break的添加时有必要的;
  • 如果要在一个case分支定义并初始化一个变量,则不可以再另一分支中使用该变量;
  • 当多个匹配标签执行相同语句时:
case 1: case2: case 3: 
    statement;
    break;

4. 迭代语句

4.1 while语句

while(condition)
    statement;
  • condition 不能为空,可以是表达式或者带初始化的变量声明;
  • 条件或循环体中的变量每次迭代都经历创建到销毁;

4.2 for语句

for(init_statement ; condition; expression)
    statement;
  • 执行过程: init —> condtion —> statement —> expression —>condition …
  • init可以定义多个变量,但是只能有一个声明,即类型必须一致;
  • condition缺省是,永远为 true

4.3 范围for语句

for(declaration: expression)
    statement;
  • 可以方便地遍历容器和其他序列的元素
  • expression必须是序列,拥有能够返回迭代器的成员begin, end
  • declaration为保证类型相容: 采用auto

4.4 do while语句

do
    statement;
while(condition);
  • 先执行循环体再检查条件;因此条件中不可以定义变量;
  • 条件后要加分号表示结束;
  • 循环体中定义的变量不可以作为用在条件中, 已经在作用域外;
    for 语句相对while的优势
      I prefer for to while in such cases, because it’s terse. More importantly, object i won’t pollute the external scope after it goes out of the loop. It’s a little bit easier to add new code into the external scope, since it reduces the possibility of naming conflicts .That is, a higher maintainability. Of course, this way makes the code a bit harder to read

5. 跳转语句

  • 共有四种跳转语句, break, continue, goto, return;

5.1 break语句

  • break 负责中止最近的迭代语句或switch语句,并从其后继续执行;即跳出循环或switch;
  • break只能在循环语句或switch内部;

5.2 continue语句

  • continue仅用于循环体中,中止当前循环内容,进入下一次迭代;
  • 仅用于最近的循环语句;

5.3 goto语句

-  不要再程序中使用goto语句,使得程序既难修改,又难理解;
goto label;

6. try 语句块和异常处理

6.1 throw 异常检测

throw runtime_error("XXXX");
  • 抛出(raise)异常将中止当前函数,并将控制权转移给异常处理代码;

6.2 try … catch

try
{
    program-statements
    throw exception-type(" XXX ");
}catch(exception-type err)
{
    handle-statements
}catch(exception-declaration)
{
    handle-statements
}
  • 运行一段program-statements,抛出一个异常,当与catch的异常声明匹配时,执行相应块;
  • 若一段程序没有try语句块,且发生了异常,则系统调用了terminate函数并终止当前程序执行;
  • catch处理完异常之后,继续按顺序执行后面的代码;

6.3标准库异常类

(笔记—C++ Primer) 第五章 语句

  • exception, bad_alloc, bad_cast采用默认初始化
  • 其他异常类型需要用字符串进行初始化;
  • 异常类型只有what成员函数, 提供关于异常的一些信息;