您的位置:首页 > 编程语言 > C语言/C++

c++ primer---读书笔记5

2010-03-04 12:22 176 查看
表达式:
表达式由操作数和操作符组合而成。表达式的结果是右值,可以读取,但不允许进行赋值。

除非知道操作数类型,否则无法确切的知道操作符执行什么操作及操作结果类型。
用于内置对性解引用的操作符要求操作数必须是指针类型。(iterator也是指针?经测试,不能打印地址)、

指针类型不能转为浮点类型。
一元操作符优先级最高,其次为乘除,然后为加减。操作符优先级相同时,从左向右依次与操作数结合。

注意:溢出和其他算术异常(如除0)

-30/3 * 21 %4 为什么结果依赖于机器,不是很明白。。。?

逻辑与和逻辑或操作符总是先计算左操作数,然后再计算右操作数;只有在靠左操作数无法确定该逻辑表达式结果时,
才会求解右操作数。这种策略通常叫 短路求值。

不应该串接使用关系操作符。(<,<=,>,>=)具有结合性,但是关系操作符返回为bool类型结果。

对于位操作符,由于系统不能确保如何处理其操作数的符号位,所以强烈建议使用unsigned整型操作数。

>>如果操作数为无符号数,左侧插入0;如果是有符号数,插入符号位副本或0,如何选择依据具体实现。
移位操作右操作数不可以为负,而且严格小于左操作数位数。否则,操作效果未定义。
|按位或 &按位与 ^位异或

一般而言,bitset优于低级直接的位操作。而且更直接,更易阅读,书写,正常使用。

移位操作符比算术操作符优先级低,但比关系,赋值和条件运算符优先级高。而且是左结合。

赋值操作拥有最低的优先级。
谨防混淆=与==操作符。

优先使用前置操作符,性能更好。只有在必要时才使用后置操作符。

后自增操作优先级高于解引用操作。因此*iter++等于*(iter++)

->操作符:(*p).foo; 等价于 p->foo;

sizeof返回值为size_t,长度单位为字节。结果为编译时常量。
求数组元素个数: int sz = sizeof(ia)/sizeof(*ia)

,号操作符,从左向右计算。

C++不保证从左到右的计算次序。
注意:在一个表达式内不要对同一个对象进行自加或自减操作。

动态创建对象时,一定要初始化。
零值指针的删除时合法的,但无意义。
int *ip = 0;
delete ip;

删除指针后,应立刻置为0.清楚表明不在指向任何对象。

c++的强制类型转换:
dynamic_cast
const_cast 去掉const属性
static_cast
reinterpret_cast
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: