重学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,在使用指针前进行检查,以免误用;
相关文章推荐
- C/C++基础试题 测试
- C++中预处理(文件包含include)
- [转]C++中关于new和delete的使用
- 三角形面积计算器--C语言
- C++中宏的定义与用法(现已被内联函数所代替)
- C++中宏和函数的区别
- 【银行家算法】操作系统课程设计
- C++中vector向量的用法(自整)
- C++中四种类型转换方式
- C++中预处理(宏详解)
- bind--C++11
- 柔性数组
- sort函数的用法(C++排序库函数的调用)
- C++ ATL 中list中删除操作
- c/c++中指针的理解(初学者)
- 【复数的四则运算(C++)】
- iOS第五天 C语言 函数
- log4cpp安装使用
- C/C++文件操作效率比较——FILE/fstream
- c++ 模板 迭代器 使用问题解决方法(too few template-parameter-lists)