C++Primer 5th Chap4 Expressions
左值和右值:左值:用的是对象的身份(内存中的位置),右值:用的是对象的值(内容)
解引用与递增(递减)运算符连用:
*ivec++:取ivec当前值并向后移动一个元素,等价于*(ivec++),本来++的优先级高于*
条件运算符嵌套:(注意在语句两端加上括号,条件运算符优先级极低)
A?B:C?D:E等价于A?B:(C?D:E)
位运算符(建议仅将位运算用于无符号类型,避免因符号位问题造成错误)
用法:
运算符 | 功能 | 用法 |
~ | 位求反 | ~exp |
<< | 左移 | exp1<<exp2 |
>> | 右移 | exp1>>exp2 |
& | 位与 | exp1&exp2 |
^ | 位异或 | exp1^exp2 |
| | 位或 | exp1|exp2 |
位运算的结果一旦超出位的范围,超出部分的位将会被舍弃
<<操作符满足左结合律
sizeof运算符:返回一条表达式或类型名所占的字节数,返回值类型为size_t,满足右结合律
sizeof(data.revenue);//获取类对象data的revenue成员对应类型的大小
sizeof(arr);//获取数组arr的类型大小,是其所有元素类型大小之和(利用sizeof(arr)/sizeof(*arr)可以获取arr的元素数量
命名的强制类型转换:cast-name<type>(expression),cast-name有4种:static_cast,dynamic_cast(后续章节再提),const_cast,reinterpret_cast
例如:
static_cast:
int j=10;
double slope=static_cast<double>( j ) / i;(只要不是底层const即可用,适用于将大类型赋给小类型)
void *vp=&d;
double *dp=static_cast<double*>(vp);
const_cast:
const char*pc;
char *p=const_cast<char*>(pc);(要求对象是底层const,借此可以除掉const属性(多用于重载函数),但是不能改变类型)
reinterpret_cast:"为运算对象的位模式提供较低层次的重新解释",基本上用不到(极可能引起错误,慎用)
实际上强制类型转换是迫不得已的手段,若非必要无需使用
运算符优先级表见p147
最新文章
- grep 使用或条件 ( grep -e )
- JAVA发送邮件工具类
- js严格模式“use strict”
- 剑指offer系列25---构建乘积数组
- CAF(C++ actor framework)使用随笔(延迟发送,消息转发,消息优先级)(四)
- Windows I/O模型、同步/异步、阻塞/非阻塞
- 深入了解join用法
- python刷取CSDN博文访问量之一
- BZOJ 1592: [Usaco2008 Feb]Making the Grade 路面修整( dp )
- 切诺夫界证明(Chernoff bound)
- iOS 中隐藏UITableView最后一条分隔线
- 第一册:lesson forty
- 项目代码迁移(使用git)
- scrapy 手动编写模板
- firefox镜像 和geckodriver驱动大全
- 导出putty配置
- checkbox做全部选中,全部取消效果
- 安装部署elasticsearch
- Eclipse开发Android的配置(包括ADT安装,SDK配置)
- 本人遇到的spring事务之UnexpectedRollbackException异常解决笔记