2010/11/6
关键字:语句
零散知识点
1. for循环中声明的变量在for循环外是不可见的,但是早期C++编译器还是支持的.VC8不支持,VC6支持.
2. 悬垂else.
if (/**/)
if (/**/)
{
}
else
{
}
else实际是对应内层的if的.
else匹配给最后出现的尚未匹配的if字句.
3. switch…case语句需要break时别忘了break语句即可.通常还是要加default标号,即使后面跟一个空语句也可以,是为了告诉它的读者考虑到了这种情况,虽然没有什么可执行的.case标号必须是整型常量表达式,并且不能重复.
string str = "123";
switch (str) //必须是整型常量表达式
{
case "123:
break;
case "234:
break;
}
4. 对于switch语句,不加块语句时只能在它的最后一个case或default标号后面定义变量;加块语句则任何标号后都可以.
switch (i)
{
case 1:
{ //有块语句
int j = 0;
j = 1;
}
break;
case 2:
int z = 0; //不用加块语句则只能放在最后一个标号
break;
}
推荐每个标号后都用{}括号.
5. while循环条件中定义的变量,每次循环都会创建、初始化、撤销,所以尽量不要在循环条件中定义变量.
6. 不允许使用goto语句.
try…catch
匹配catch步骤:
假如,一个try块可能调用包含另一try块的函数,它的try块又调用了含有try块的另一个函数,依次类推.
寻找处理代码的过程与函数调用链相反.抛出一个异常时,首先要搜索的是抛出异常的函数.如果没有找到匹配的catch,则终止这个函数的执行,并在调用这个函数的函数中寻找匹配的catch.如果依然没有找到相应的处理代码,该函数同样终止,搜索调用它的函数.如此类推,继续按执行路径回退,知道找到合适的catch为止.
如果不存在处理该异常的catch子句,程序的运行将跳转到terminate标准库函数.该函数在exception头文件中定义.这个标准库函数的行为依赖于系统.通常它的执行会导致程序非正常退出.
没有定义try块和没有任何catch块捕捉到异常的效果是一样的.
异常类 |
描述 |
头文件 |
|
exception |
最常见的错误 |
stdexcept |
|
runtime_error |
运行时错误:仅在运行时才能检测到的错误 |
stdexcept |
|
range_error |
运行时错误:生成的结果超出了有意义的值域范围 |
stdexcept |
|
overflow_error |
运行时错误:计算上溢 |
stdexcept |
|
underflow_error |
运行时错误:计算下溢 |
stdexcept |
|
logic_error |
逻辑错误:可在运行前检测到的问题 |
stdexcept |
|
domain_error |
逻辑错误:参数的结果值不存在 |
stdexcept |
|
invalid_argument |
|