1、 表达式由一个或多个操作数构成。最简单的表达式由一个文字常量或一个对象构成。一般地,表达式的结果是操作数的右值。
2、 条件操作符(?:)测试问号前面的条件,如果为true,选择问号与冒号之间的表达式,如果为false,选择冒号后面的表达式。逻辑与操作符&&,当左右两边的子表达式都为true时,它的值为true。
3、 算数操作符:/除,2个整数相除的结果是整数,如果商含有小数部分,将被截掉。而%计算2个数相除的余数,该操作符只能用在有序类型(char,short,int,long)的操作数上。
4、 二元关系操作符的缺点:左右操作数的计算顺序在标准C和C++中都是未定义的,因此计算过程是与顺序无关的。
5、 初始化过程为对象提供了初值,而赋值则是用一个新值覆盖对象的当前值。他们使用同一个操作符(=),一个对象只能被初始化一次,也就是在它被定义的时候,但是在程序中可以被赋值多次。
6、 赋值的规则是:右边表达式的类型必须与左边被赋值对象的类型完全匹配。如果不匹配,编译器会试着隐式的把右边操作数的类型转换成被赋值对象的类型(如果涉及到精度损失,如double转换成int,通常会给出一个警告),但是如果不能进行隐式的类型转换,那么赋值操作会被标记为编译时刻出错。
7、 赋值操作符的左操作数必须是左值,它必须有一个相关联的、可写的地址值。下面是一个明显的非左值赋值例子:1024=ival;解决办法是;int ival =1024;value=ival;有些情况下只有左值是不够的,例如:
Const int array_size=8
Int ia [array_size]={0,1,2,3,4,5,6,7} ;
Int pia =ia;
array_size=512; //错误:尽管左边是左值,但array_size的const定义使它的地址值不可写
ia=pia; //错误:尽管ia是左值,但是数组对象本身不能被赋值,只有它包含的元素才能被赋值
pia+2=1; //错误:尽管pia +2计算出ia【2】的地址,但结果不是一个可写的地址值,如果把解引用符用在地址上,赋值就是正确的。
*(pia+2)=1; //解引用操作符表示赋值是对pia+2指向的对象。
赋值操作符可以被连在一起,只要每个被赋值的操作数都是相同的数据类型
8、 递增和递减操作符一般用法是对索引、迭代器或一个集合内部的指针加1或减1.有前置和后置两个版本,在前置形式中,当前值先被递增递减1,然后在使用它的值。后置形式是先使用它的值,然后再增减1.
9、 复数操作:我们可以混合复数类型和算数数据类型,也可以用一个算数类型的值对复数初始化或赋值,但算数类型不能直接被一个复数类对象初始化或赋值(因为从复数到算数类型之间并没有隐式转换支持)。如果真想这样做,必须显式的指明我们要用复数的哪一部分来赋值,复数支持一对操作,可用来读取实部或者虚部,例如我们可以用成员访问语法:double re=complex_obj.real();
Doubleim=complex_obj.imag();
10、复数支持4种复合赋值操作符:+=、-=、*=、/=复数类支持的其他操作包括sqrt()、abs()、polar()、sin()、cos()、tan()、exp()、log()、pow()、log10()
11、条件操作符:a?b:c;如果a的计算结果是TRUE,则b被计算,否则c被计算。
12、sizeof操作符的作用是返回一个对象或类型名的字节长度。它有以下三种形式:sizeof(type name);sizeof (object);sizeof object;返回值的类型是size_t,这是一种与机器相关的typedef定义,我们可以在cstddef头文件中找到它的定义。下面的例子使用了sizeof的两种格式:include<cstddef>
Int ia[]={0,1,2};
Size_t array_size=sizeof ia;//sizeof 返回整个数组的大小
Size_t element_size=array_size /sizeof(int);//sizeof 返回int 类型的大小
当sizeof应用在数组上时,它返回整个数组的字节长度而不是第一个元素的字节长度,也不是数组包含的元素的个数。例如在一个int类型是4个字节的机器上,sizeof指示的ia的长度是12字节。
Int*pi=new int[3];
Size_t pointer_size=sizeof (pi); //sizeof(pi)的返回值是指向int类型的指针的字节长度,而不是pi所指向的数组长度。
应用在指针类型的sizeof操作符返回的是包含该类型地址所需的内存长度。但是应用在引用类型上的返回的则是包含被引用对象所需的内存长度。Sizeof操作符应用在char类型上时,所有的C++实现结果都是1. size_tchar_size=sizeof(char);
12、 new和delete表达式:系统为每一个程序都提供一个在程序执行时可用的内存池,这个可用的内存池被称为程序的空闲存储区或堆。运行时刻的内存分配被称为动态内存分配。例如:int*pi=new int ; //在空闲存储区分配了一个int型的对象,并用它的地址初始化pi.在空闲存储区内实际分配的对象并没有被初始化。我们可以如下指定一个初始值:int*pi=new int (1024);
13、动态分配一个对象数组;int *pia=new int [10];从空闲存储区分配了一个含有10个int型对象的数组,并用它的地址初始化pia,而数组的元素并没有被初始化,没有语法能为动态分配的数组的元素指定一个显式的初始值集合。所有从空闲存储区分配的对象都是未命名的,new表达式并不返回实际被分配的对象,而是返回这个对象的地址,对象的所有操作都通过这个地址来间接完成。当对象完成了使命,我们必须显式的吧对象的内存还给空闲存储区。
14按位非操作符~:翻转操作数的每一位,1被设置为0,0被设置为1.
移位操作符<<,>>:将其左边的操作数的位向左或向右移动这些位。
按位与操作符&:如果2个操作数都为1,则该位为1,否则为0.
按位异或^:2个操作数只有一个为1,则该位为1,否则为0,。
按位或|:2个操作数只要有一个为1,则该位为1,否则为0,
15、 bitset操作
test(pose):pos位是否为1.
any()任意位是否为1.
none()是否没有位为1.
count()值是1的个数。
Size()位元素的个数。
[pos]访问pos位。
Flip()翻转所有位。
Flip(pos)翻转pos位。
Set()将所有位置1.
reset()将所有位置0.