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 ;
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 : case 2: 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标准库异常类
exception, bad_alloc, bad_cast
采用默认初始化其他异常类型需要用字符串进行初始化; 异常类型只有what
成员函数, 提供关于异常的一些信息;