C++ Primer第五章 语句
简单语句
点击查看
1.空语句
; 一个单独的分号就是空语句
如果程序的某个地方,语法上需要一条语句但逻辑上不需要的时候,就使用空语句
例如:当循环的全部工作在条件部分就可以完成的时候
1 | while(cin >> s && s != sought) |
注意:使用空语句的时候最好加上注释,以表明该语句是有意省略的
2.复合语句(块)
如果在程序的某个地方,语法上需要一条语句,但是逻辑上需要多条语句,就应该使用复合语句
空块,是指内部没有任何语句的一对花括号,空块的作用等价于空语句
语句作用域
点击查看
可以在if、switch、while、for语句的控制结构内定义变量。定义在控制结构中的变量只在相应语句的内部可见
条件语句
点击查看
if语句
c++primer p156-159
switch语句
1.case关键字和它对应的值一起被称为case标签,
case标签必须是整型常量表达式。
另,default也是一种特殊的case标签
2.如果没有任何一个case标签能匹配上switch表达式的值,程序将执行紧跟在default标签后面的语句
1 | //统计元音字母与非元音字母的数量 |
注意:标签后面必须跟上一条语句或另一个case标签
迭代语句
点击查看
while语句
c++primer p165
传统的for语句
1.for语句头中可以定义多个对象,但因为只能有一条声明语句,所以所有变量的基础类型必须相同
1 | for(decltype(v.size()) i = 0, sz = v.size(); i != sz; ++i){ |
2.for语句头中的三个部分都可以省略
范围for语句
1.c++11新标准引入了范围for语句。语法形式为:
1 | for(declaration : expression) |
expression表示的必须是一个序列,比如花括号括起来的初始值列表,数组或者vector、string类型的对象。这些类型的共同特点是拥有能返回迭代器的begin和end成员。
declaration定义一个变量。如果需要对序列中的元素执行读写操作,循环变量必须声明成引用类型。
例:把vector对象中所有的元素都翻倍
1 | vector<int> v = {0, 1, 2, 3, 4, 5 ,6 ,7 ,8 ,9}; |
2.不能通过范围for语句增加序列中元素的数量,因为范围for语句通过end迭代器预存了end()的值,如果添加或者删除元素,end函数的值可能会失效。
do while语句
do while语句与while很相似,唯一的不同是dowhile语句至少会执行一次循环。
跳转语句
点击查看
try语句块和异常处理
点击查看
在c++语言中,异常处理包括throw表达式,try语句块,一套异常类三个组成部分
c++primer p173
throw表达式
程序的异常检测部分使用throw表达式引发一个异常。throw表达式包括关键字throw和紧随其后的一条表达式,表达式的类型就是抛出的异常类型。
try语句块
try语句块的通用语法形式是
1 | try{ |
当选中了某个catch子句处理异常之后,执行与之对应的块。catch一旦完成,程序跳转到try语句块最后一个catch子句之后的那条语句继续执行。
try语句块内的声明的变量无法在块外部访问,特别是在catch子句内也无法访问。
c++primer p175
标准异常
c++标准库定义了一组类,用于报告标准库函数遇到的问题。分别定义在4个头文件中:
exception头文件定义了最通用的异常类exception。它只报告异常的发生,不提供任何额外信息。
stdexcept头文件定义了几种常用的异常类 c++primer p176
new头文件定义了bad_alloc异常类型 c++primer p407
type_info头文件定义了bad_cast异常类型 c++primer p731





