《C++ Primer》读书笔记 第5章:语句
来源:互联网 发布:富士施乐驱动for mac 编辑:程序博客网 时间:2024/05/17 22:01
前面一些简单的知识点略过
swtich语句
case关键字和它对应的值一起被称为case标签。case标签必须是整形常量表达式,另外要注意的是bool、char、short、枚举类型也算是整形。
switch语句中如果某个case标签匹配成功,将从该标签开始往后执行所有case分支。
每个case语句分支后都应该有break语句,以防止不必要的错误发生。如果是人为省略了break语句,则应该添加注释说明意图。另外每一个switch语句中都应该有default分支,哪怕其什么也不做。
swtich语句内部的变量定义
在switch语句中,如果在某处一个带有初值的变量位于作用域外,而在另一个case语句分支中该变量位于作用域之内,则从前一处跳转到后一处的行为是非法的。c++规定,不允许跨过变量的初始化语句直接跳到该变量作用域的另一个位置。
case true: string file_name; //错误:控制流绕过了一个隐式初始化的变量 int val = 0; //错误:控制流绕过了一个显式初始化的变量 int val; //正确:因为val没有进行初始化 break;case false: val = next_num(); if(file_name.empty()) { ... } break;
一般来说,如果需要为某个case分支语句定义并初始化一个变量,我们应该将变量定义在一个语句块中,从而保证后面的case标签都在变量作用域外。
case true{ string file_name;}break;
goto语句
goto语句的作用是从goto语句无条件跳转到同一函数内的另一条语句。语法形式如下:
goto label; //label为一个语句标签
label是用于标识一条语句的标识符。带标签语句是一种特殊的语句,在它之前有一个标识符以及一个冒号:
end: return; //一条带标签语句
和switch语句类型,goto语句也不能将程序的控制权从变量的作用域之外转移到作用域之内,比如
goto end; int ix = 10;end: ix = 42; //错误,跳过了变量的初始化语句
向后跳过一个已经执行的定义时合法的,跳到变量定义之前意味着系统将销毁该变量,然后重新创建它。
begin: int sz = get_size(); if(sz < 0) { goto begin; //从作用域内跳到作用域外是合法的 }
在实际编程中应该尽量少使用goto语句,因为这使程序难理解而且不宜修改。
try语句块和异常处理
throw表达式用于抛出异常,try语句块用于捕获异常。throw可以抛出任何类型的对象作为异常。
通常形式如下:
try{ ... throw err;}catch(err){}
如果一个异常无法被catch捕获,则程序会调用terminate函数终止程序的执行。
标准库中定义几种异常类型以供使用。
- 《C++Primer》读书笔记——第5章 语句
- 【c++ primer读书笔记】【第5章】语句
- 《C++ Primer》读书笔记 第5章:语句
- C++ primer 读书笔记(第5章)语句
- C++Primer第5版读书笔记(第5章)
- C++Primer第5版读书笔记(第2章)
- C++Primer第5版读书笔记(第3章)
- C++Primer第5版读书笔记(第4章)
- C++Primer第5版读书笔记(第6章)
- C++Primer第5版读书笔记(第7章)
- C++Primer第5版读书笔记(第8章)
- C++Primer第5版读书笔记(第9章)
- C++Primer第5版读书笔记(第10章)
- C++Primer第5版读书笔记(第11章)
- C++Primer第5版读书笔记(第12章)
- C++Primer第5版读书笔记(第13章)
- C++Primer第5版读书笔记(第14章)
- C++Primer第5版读书笔记(第15章)
- oracle 执行 被卡死处理
- 计算机视觉开发必备工具
- easyui 项目ui.js公共方法
- 计算景深的ZEMAX宏 光学软件
- C++中关于静态对象的使用( local static object and global static object)
- 《C++ Primer》读书笔记 第5章:语句
- 脉冲云能做什么
- Mac 下使用chmod修改权限
- Fafu OJ A+B Problem
- 中断与中断向量、硬件中断与软件中断、可屏蔽中断与不可屏蔽中断(转)
- 一文弄懂python装饰器
- 使用python读取txt文件的内容,并删除重复的行数
- 多线程学习
- Android7.0中文文档(API)-- TextSwitcher