C++ Primer(语句)

第六章 语句

1.  每个case不一定非要另起一行

case 1: case 2: case 3: case 4: case 5:

    ++i;

    break;

case值必须是整型常量表达式

有两个case标号的值相同则编译错

良好的程序要定义default: 即使没有什么要做的,;空语句也行 

switch内部的变量定义:规定只能在最后一个case之后或default之后定义变量,要为某个case定义变量,那么要加{}。这样是为保证这个变量在使用前被定义一初始化(若直接执行后面case,且用到了这个变量 ,由于作用域可见,但未定义就使用了)

2. do{}while();以;结束

 不能在while语句中定义变量

 do{ numble(foo);} while(int foo=get_foo())

3.for语句的初始化语句中定义多个对象必须具有相同的一般类型:

 const int size=42;

 int val=0,ia[size];

for(int ival=0,*pi=ia,&ri=val;ival!=size;++ival,++pi,++ri)   //一个int,一个int指针,一个int引用

4.break只能出现在循环或switch结构中,或者出现在嵌套于循环或switch结构的语句里。

 continue语句导致最近的循环语句的当次迭代提前结束。只能出现在for/while或do while循环中,包括嵌套这些循环内部的块语句中。

5.在设计良好的程序中, 异常是程序错误处理的一部分

异常是运行时出现的异常

#include<stdexcept>

try {

if (true)

throwruntime_error(“error!”);

     } 

catch (runtime_error err) 

{

       cout << err.what() << endl;

}

先在当前代码中找catch,若没有匹配的,则一上层调用函数中寻找,若仍没找到,则一直找下去,最终由#include <exception>中定义的terminate终止程序执行。若程序在没有try catch的地方出现异常,则由terminate自动终止程序的执行

 

bitset的to_ulong操作,若提供的位数大于unsigned long的长度32位时,就异常overflow_error,查看t6_23

   bitset<33> ib;

   ib[ib.size()-1] = 1; // 最高位是1

    try{

       ib.to_ulong();

        }

catch (overflow_error err) 

{

       cout<< "overflow" << endl;

       cout<< err.what() << endl; // what返回const chat*

       }

  catch (runtime_error err)

 {

       cout<< "runtimeerror" << endl;

       cout << err.what() << endl;

      }

6.异常类 #include <stdexcept>

exception // 最常见异常类

runtime_error   // 下面几个运行时错

range_error // 生成的结果超出了有意义的值域范围

overflow_error // 上溢

underflow_error // 下溢

logic_error  // 可在运行前检测到的问题,下面几个逻辑错

domain_error // 参数的结果值不存在

invalid_argument // 不合适的参数

length_error         //超出该类型最大长度

out_of_range      //使用一个超出有效范围的值

#include <new>

bad_alloc

#include <type_info>

bad_cast

以上红色的三个只有默认构造函数,不使用string初始化

7.   使用预处理器编写调试代码

#ifndef NDEBUG

cerr << “oh,shit!” << endl;

#endif

    很多编译器执行时

$ CC –DNDEBUG main.C

    相当于在main.c开头提供#define NDEBUG预处理命令

8.   预处理宏assert #include <cassert>

assert(expr)与NDEBUG配合使用的

只要NDEBUG没有定义,则执行assert,若为false则输出信息并终止程序的执行

测试不可能发生的条件

异常是处理预期要发生的错误,而断言是测试不可能发生的事情

一旦开发和测试完成,程序就已经建立好,并定义了NDEBUG。成品代码中,assert不执行,因此没有运行时代价,没有运行时检查。

 

assert仅用于检查确定不可能的条件,只对程序的调试有帮助,不能用来代替运行时的逻辑检查logic_error,也不能代替对程序可能产生的错误runtime_error的检查


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值