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

重学C++ (三) 表达式

2016-01-11 21:37 495 查看

第五章 表达式

1.求余操作符的操作数只能为整型(包括bool,char,short,int,long类型以及对应的unsigned类型);

2.逻辑与和逻辑或操作符总是先计算其左操作数,然后再计算右操作。它们的求值策略为“短路求值”——只有在仅靠左操作数的值无法确定该逻辑表达式的结果时,才会求解其右操作数;

3.不能串接使用关系操作符,因为关系操作符返回bool类型的结果;(如i < j < k 应写成 i < j && j < k)

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

5.移位操作的右操作数不可以是负数,且必须是严格小于左操作数的位数的值,否则,操作效果是未定义的;

6.赋值操作具有右结合性:

[code]int i = j = 520; //ok, j = 520, i = j;


7.谨防混淆 = 与 == :

[code]if (i = 42) //将42赋给i, 此时i非0,if条件成立

if (i == 42) //检查i是否等于42


8.自增,自减操作符:

前置操作返回加1后的值,所以返回对象本身,是左值;

后置操作返回的是右值;

**前置操作的性能比后置操作好: 前置操作只需加1后返回结果即可;而后置操作需要先保存原来的值,以便返回未加1前的值为操作结果(对于整型对象和指针,编译器可优化这项工作,但是对复杂的迭代器类型,可能会产生比较大的性能差异);

9.

[code]cout << *iter++ << endl;
//等价于:
cout << *(iter++) << endl;
//等价于:
cout << *iter << endl;
++iter;

//后自增操作优先于解引用操作,故等价于*(iter++),上例中,iter先自增,然后(iter++)返回的值是自增前的值,故解引用的是自增前的值;


10.sizeof操作符:

首先,它是一个操作符,而不是函数;

返回类型为size_t,单位是字节;

sizeof操作符不能用于函数类型(注意与函数返回值区分),不完全类型或位字段(不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void类型等);

对函数使用sizeof,在编译阶段会被函数返回值的类型取代(注意,并不执行函数);

**sizeof并不计算表达式的值,它的内容(即括号里的部分)将会被替换成类型;

当操作数具有数组类型时,其结果是数组的总字节数;

当操作数是联合类型时,sizeof是其最大字节成员的字节数;

当操作数是结构类型时,sizeof是其成员类型的总字节数,包括补充字节在内(比如内存对齐的情况);

不能对void进行sizeof操作;

string是C++类型的字符串,是一个类,所以sizeof(s)表示的并不是字符串的长度,而是类string的大小;

11.逗号表达式的结果是其最右边表达式的值;

12.

[code]int *pi = new int; //没有初始化
int *pi = new int(); //初始化为0


13.对零值指针的删除是合法的,但是并没有意义;

14.一旦删除了指针所指向的对象,应立即将指针置0,在使用指针前进行检查,以免误用;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: