又分为表达式语句和复合语句,表达式语句以分号结尾,复合语句用花括号括起来的,用于语法上需要一条语句,而逻辑上需要多条语句的情况。复合语句又称为块,一个快是一个作用域,块不以分号结束。
在 if,switch,while,for 语句内定义的变量只在相应的语句内部可见。
若其他代码也需访问,可将变量定义在外部。
如果某个 case 标签匹配成功,将从该标签往后执行所有的 case 分支,除非程序显式中断这一过程。
注: switch 内部定义变量应放在一个块内,确保之后所有的 case 标签都在变量的作用域之外。用于防止使用未初始化变量的情况。
while(condition)
statement
当 condition 为真,程序便会执行循环体。
for(init-statement;condition;expression)
statement
首先执行 init-statement, 然后执行 condition,若 condition 为真,执行循环体,最后执行 expression, 如果 condition 为假,跳出循环。
for(declaration : expression)
statement
expression 是一个序列,比如用花括号括起来的初始值列表,数组,vector 和 string 类型的对象。
declaration 定义了一个表脸,序列中的每个元素都要可以转化成该对象的类型。
do
statement
while(condition);
do while 后需要加一个分号表示语句结束。
程序的异常检测部分使用 throw 表达式引发一个异常。throw 表达式包含关键字 throw 和紧跟其后的一个表达式,其中表达式的类型就是抛出的异常类型。
例如:
if(item1.isbn() != item2.isbn()){
throw runtime_error("Data must refer to same isbn");
}
cout << item1+item2 <<endl;
语法格式:
try{
program-statements
}catch(exception-declaration){
handle-statements
}catch(exception-declaration){
handle-statements
} // ...
例如:
while(cin >> item1 >> item2){
try{
if(item1.isbn() != item2.isbn()){
throw runtime_error("Data must refer to same isbn");
}
cout << item1+item2 <<endl;
}catch(runtime_error err){
cout<<err.what()
<<"\nTry again? Enter y or n";
char c;
cin >> c;
if(!cin || c == 'n')
break;
}
}
在程序逐层执行的过程中,若抛出异常会从抛出该异常的函数按程序调用顺序从里向外依次寻找 catch 语句,最终若都没找到,程序转到名为 terminate 的标准库函数,一般情况下执行该函数将导致系统非正常退出。
C++ 标准库定义了一组类报告标准库函数遇到的问题。这些异常类可以用在用户编写的程序中,他们分别定义在 4 个头文件中。
<stdexcept> 定义的异常类: