简单语句

点击查看

1.空语句

; 一个单独的分号就是空语句
如果程序的某个地方,语法上需要一条语句但逻辑上不需要的时候,就使用空语句
例如:当循环的全部工作在条件部分就可以完成的时候

1
2
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
2
3
4
5
6
7
8
9
//统计元音字母与非元音字母的数量
switch (ch){
case 'a': case 'e': case 'i': case 'o': case 'u':
++vowelCnt;
break;
default:
++otherCnt;
break;
}

注意:标签后面必须跟上一条语句或另一个case标签

迭代语句

点击查看

while语句

c++primer p165

传统的for语句

1.for语句头中可以定义多个对象,但因为只能有一条声明语句,所以所有变量的基础类型必须相同

1
2
3
for(decltype(v.size()) i = 0, sz = v.size(); i != sz; ++i){
v.push_back(v[i]);
}

2.for语句头中的三个部分都可以省略

范围for语句

1.c++11新标准引入了范围for语句。语法形式为:

1
2
for(declaration : expression)
statement

expression表示的必须是一个序列,比如花括号括起来的初始值列表,数组或者vector、string类型的对象。这些类型的共同特点是拥有能返回迭代器的begin和end成员。

declaration定义一个变量。如果需要对序列中的元素执行读写操作,循环变量必须声明成引用类型。

例:把vector对象中所有的元素都翻倍

1
2
vector<int> v = {0, 1, 2, 3, 4, 5 ,6 ,7 ,8 ,9};
for(auto &r : v) r *= 2;//必须是引用类型

2.不能通过范围for语句增加序列中元素的数量,因为范围for语句通过end迭代器预存了end()的值,如果添加或者删除元素,end函数的值可能会失效。

do while语句

do while语句与while很相似,唯一的不同是dowhile语句至少会执行一次循环。

跳转语句

点击查看

c++提供了四种跳转语句

break, continue, goto, return

break语句

break语句终止离它最近的一条循环语句或switch语句

continue语句

continue语句终止离它最近的循环中的当前迭代,并立即开始下一次迭代

goto语句

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

尽量不要使用!!

try语句块和异常处理

点击查看

在c++语言中,异常处理包括throw表达式,try语句块,一套异常类三个组成部分

c++primer p173

throw表达式

程序的异常检测部分使用throw表达式引发一个异常。throw表达式包括关键字throw和紧随其后的一条表达式,表达式的类型就是抛出的异常类型。

try语句块

try语句块的通用语法形式是

1
2
3
4
5
6
7
try{
program-statements
}catch(exception-declaration){
handler-statements
}catch(exception-declaration){
handler-statements
}

当选中了某个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