c++ primer 读书笔记第五章:语句
来源:互联网 发布:alphago 策略网络 编辑:程序博客网 时间:2024/06/07 19:08
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语句,因为这使程序难理解而且不宜修改。
0 0
- C ++ Primer | 第五章 语句
- c++ primer 读书笔记第五章:语句
- 《C++ Primer》读书笔记-第五章 语句
- 《C++ Primer》读书笔记第五章-语句
- C++Primer再读读书笔记:第五章
- C++Primer读书笔记(第五章)
- c++primer第五章语句小结-5
- 菜狗的C++ primer读书笔记:第五章 语句
- 《C++primer(第五版)》学习之路-第五章:语句
- <<C++Primer PLus 第五版>>读书笔记1
- <<C++Primer PLus 第五版>>读书笔记2
- <<C++Primer PLus 第五版>>读书笔记3
- C++Primer PLus 第五版读书笔记
- <<C++Primer PLus 第五版>>读书笔记4
- <<C++Primer PLus 第五版>>读书笔记3
- <<C++Primer PLus 第五版>>读书笔记2
- <<C++Primer PLus 第五版>>读书笔记1
- C++primer 第五章
- leetcode--016. 3Sum Closest
- 【POJ 3414】Pots(BFS)
- 移除0元素,把0元素按相对位置放到数组最后
- 媒体标签
- 关于负数的isdigit()判断
- c++ primer 读书笔记第五章:语句
- 填上浏览器跳转app-webview,app没有接收跳转url的查询参数的坑
- 进制转换
- 【多线程】线程池
- 进制转换
- Android studio 中 try catch 与 finally的比较常见的用法
- RemoteViews
- 2016 Multi-University Training Contest 5 题解
- VS C# 命名空间 “ ”中不存在类型或命名空间名称 “ ” 。是否缺少程序集引用?