C++Primer 表达式

1.算数操作符:

溢出:计算出的数值超出了其类型的表示范围,值会发生截断wrapped around。

截除:整数的除法结果仍为整数,小数部分会被截除。

求余:两个操作数都是整数。

2.关系操作符和逻辑操作符:

优先级:关系操作符>逻辑操作符

短路求值:逻辑与逻辑或总是先计算做操作数,若不需要计算右操作数就能知道表达式结果就不进行了。

3.位操作符:优先级算数操作>移位操作>关系操作

bitset<30> bitset_quiz;//定义30位存储0,1值,并初始化为0
unsigned lont int_quiz = 0;
bitset_quiz.set(27);//把第27位置1,其他位不变
int_quiz |= 1UL<<27;
bitset_quiz.reset(27);//把第27位置0,其他位不变
int_quiz &= ~(1UL<<27);
status = bitset_quiz[27];//取第27位的值
status = int_quiz & (1UL<<27);

4.赋值操作:优先级关系操作>赋值操作

赋值操作的做操作数必须是非const的左值,不包括字面值,算数表达式,数组名,const变量等。

赋值操作右结合,允许多个赋值操作写在一个表达式。


5.自增和自减操作符:优先级解引用*>自增操作符

++x:使操作数加1,表达式结果是修改后的值。x++:使操作数加1,但表达式结果是原来的未修改的值。一般都使用前置,因为后置需要保存两个量,在复杂应用时花费更大的代价。


6.箭头操作符:用指针去取类成员时使用。等价于先对指针解引用*p找到这个对象,然后点操作符取类成员。

item1.same_isbn(item2);
Sales_item *sp = &item1;
(*sp).same_isbn(item2);
sp->same_isbn(item2);


7.条件操作符:cond ? expr1 : expr2;

条件操作符的优先级相当低,所以在输出时一定要用括号括起来。

cout<<(i<j?i:j);

8.sizeof:返回一个对象或类型名的长度,返回值为size_t。长度的单位是字节。

sizeof(type name);
sizeof(expr);sizeof expr;

对char类型或值为char类型的表达式sizeof得到1。

对指针做sizeof(p);操作返回存放指针所需的内存大小,对解引用的指针sizeof *p,返回的是指针所指向对象的大小。

对数组做sizeof(ia)就是求整个数组当前元素的总内存大小。sizeof(ia) = sz * sizeof(*ia);


9.优先级总结:成员操作>自增>逻辑非>解引用>取地址>算数运算>移位操作>关系操作>位操作>逻辑操作>条件操作>复制操作>逗号操作符


10.new delete

(1)动态创建对象的初始化:

int i(1024);
int *pi = new int(1024);//pi points to an int value-initialized to 0
int *pi1 = new int;//pi points to an int uninitialized
int *pi2 = new int();//pi points to an int value-initialized to 0


(2)删除:只能用delete把new创建的指针删除,除非这个指针是0值,用delete就是合法的。如果用new生成的是一个数组,那么删除时应该用[],指明这是数组。

delete ip;
delete [] ip;

删除之后尽管ip指向的内存已经释放,但p还是存放了之前所指向对象的地址,该指针变成了悬垂指针。应该立即把指针置为0。删除动态分配内存失败称为内存泄露memory leak。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值