《C++ Primer 第三版》读书笔记——第四章 表达式


1、ptr != 0 && *ptr != 0和ptr && *ptr,后者更符合C++的程序习惯。

2、表达式的计算是指执行一个或多个操作,最后产生一个结果,一般是个右值,结果的类型由操作数的类型决定。

3、对于复合表达式,从左边开始,第一个能确定结果的子表达式后面的子表达式不被计算。

4、如果两个操作数中有一个(或两个)为负,取模(%)的结果的符号取决于机器,移植性无法保证。

5、算数表达式的计算会导致不正确或未定义的值,即算数异常(但不会抛出实际的异常)。算数异常要归咎于算数的自然本质(比如除以0)或计算机的自然本质(比如溢出)。

6、二元关系操作符的操作数的计算顺序在标准C或C++中都是未定义的,因此计算过程必须是与顺序无关的,如:

if ( ia[index++] < ia[index] )

7、sizeof的三种形式:

  • sizeof( type name )
  • sizeof( object )
  • sizeof object

返回值类型为size_t,是一种与及其相关的typedef定义,需要头文件

#include <cstddef>

8、sizeof在编译时刻计算,被看作是常量表达式。

9、系统为每个程序都提供了一个在程序执行时可用的内存池,被成为空闲存储区(free store)或堆(heap)。

10、new:

  • int *pi = new int;         //或直接初始化 int *pi = new int( 1024 );
  • int *pia = new int[10];

相应的delete:

  • delete pi;
  • delete [] pia;

11、逗号表达式从左向右计算,结果时最右边的表达式的值。

12、大多数位操作中,符号位的处理是未定义的,因此强烈建议使用无符号类型。

13、算数转换的通用指导原则:

  • 为防止精度损失,如果必要的话,类型总是被提升为较宽的类型。
  • 所有含有小于整型的整值类型的算数表达式,在计算之前,其类型都会被转换成整型。

14、通过使用强制类型转换操作符,程序员关闭了C++语言的类型检查设施。

15、const_cast必须应用于常量对象,并将转换掉表达式的常量性(以及volatile对象的volatile性)。

16、static_cast用于所有类型的隐式转换,显示标出。

17、reinterpret_cast通常对于操作数的位模式执行一个比较低层次的中心解释,如:

complex *pcom;
char *pc = reinterpret_cast< chat * >( pcom );      //pc到底是什么?它对pcom那段内存怎么解释?晕~

18、旧式强制类型转换两种形式:

  • type (expr);
  • (type) expr;

可以用来代替标准C++中的static_cast、const_cast、reinterpret_cast。但推荐使用显示转换。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值