博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C++ Primer 读书笔记 Chapter 5 表达式

Posted on 2010-08-17 22:21  KurtWang  阅读(207)  评论(0编辑  收藏  举报
  1. 位操作符:~求反,&位与,|位或,^位异或
    1. 位异或,b1^b2,b2中的1,b1中对应的那一位取反,b2中的0,b1中对应的那一位不变
  2. 自增和自减:只有在必要时才使用后置操作符(i++,i--),推荐使用++i, –i
    1. 前置操作需要做的事情更少,只需加1后返回加1的结果即可,不需要保存原来的值。
  3. sizeof
    1. sizeof对char结果是1
    2. 对引用类型做sizeof,将返回此类型对象所需的内存空间
    3. 对指针做sizeof,返回内存指针所需的内存大小
    4. 对数组做sizeof,等于将元素类型做sizeof的结果乘以数组元素的个数
  4. 动态创建对象的默认初始化
      int * pi = new int;  //pi points to an unintialized int
      int * pi = new int(); //pi points to an int value-initialzed to 0
  5. delete:只能释放动态申请的内存空间(new分配的)
      int i;
      int * pi = &i;
      delete pi; //error, pi points a local
    1. 在delete后,立即将指针设为0,避免成为悬垂指针(dangling pointer)。
  6. 类型转换
    1. 隐式转换:
      1. 操作数被转换成相同的类型:int+double int会被转成double
      2. 用作条件表达式会被转换成bool
      3. 用一表达式初始化某个变量,或将表达式的值赋给某个变量
    2. 算术转换,先整数提升再进行类型转换:
      1. 整型提升(所有比int小的,比如char,short等,如果能包容在int内,则提升为int,否则提升为unsigned int)
      2. 不同类型,会将小精度的转换成大精度(short和int,short变成int;long和int,int变成long)
      3. 相同类型,unsigned和signed,signed会被转换成unsigned
    3. 指针转换:int ia[10]; int * ip = ia;
    4. 算术类型与bool类型转换:0=>false,其他值=>true
    5. const转换:非const对象初始化const对象的引用,非const对象的地址转换为指向相关const类型的指针
    6. 显式转换:static_cast, dynamic_cast, const_cast, reinterpret_cast,
    7. int ival;
      double dval; 
      iva l*= static_const<int>(dval);
      C的类型转换:type(expr), (type)expr, 都可以