《C++ Primer》 第五章 语句
复合语句:用花括号括起来的语句(可能是空的)和声明的序列,复合语句也被称为块。
for语句:
//重复处理s中的字符直到处理完全部字符或者遇到了一个表示空白的字符
for (decltype(s.size()) index = 0; index != s.size() && !isspace(s[index]); ++index)
s[index] = toupper(s[index]); //将当前字符改成大写形式
范围for语句:
for(declaration: expression)
statement
for(auto beg = v.begin(),end=v.end();beg!=end;++beg){
auto &r=*beg; //r必须是引用类型,这样才能对元素执行操作
r* = 2;
}
不能通过范围for语句增加vector对象的元素。因为在范围for语句中,预存了end()的值,一旦在序列中添加(删除)元素,end函数的值就可能变得无效了。
goto语句:从goto语句无条件跳转到同一函数内的另一条语句。
goto label;
其中,label是用于标识一条语句的标识符。带标签语句是一种特殊的语句,在它之前有一个标识符以及一个冒号:
end: return; //带标签语句,可以作为goto的目标
goto语句不能将程序的控制权从变量的作用域之外转移到作用域之内。goto语句和控制权转向的那条带标签的语句必须位于同一个函数之内。
try语句块和异常处理
典型的异常包括失去数据库连接以及遇到意外输入。
- throw表达式:表示遇到了无法处理的问题
- try语句块:以关键字try开始,并以一个或多个catch子句结束。try语句块中代码抛出的异常通常会被某个catch子句处理。
try语句块的通用语法形式:
try {
program-statements
} catch (exception-declaration) {
handler-statements
} catch (exception-declaration){
handler-statements
}//....
定义的异常类
- exception:最常见的问题
- runtime_error:只有在运行时才能检测出的问题
- range_error:运行时错误:生成的结果超出了有意义的值域范围
- overflow_error:运行时错误:计算上溢
- underflow_error:运行时错误:计算下溢
- logic_error:程序逻辑错误
- domain_error:逻辑错误:参数对应的结果值不存在
- invalid_argument:逻辑错误:无效参数
- length_error:逻辑错误:试图创建一个超出该类型最大长度的对象
- out_of_range:逻辑错误:使用一个超出有效范围的值