我读C++ Primer - 运算符与表达式
来源:互联网 发布:开淘宝店需要用电脑吗 编辑:程序博客网 时间:2024/06/10 20:20
表达式由一个或多个运算对象和运算符组成,对表达式求值将得到一个结果。
运算符有一元运算符,二元运算符,三元运算符。
运算符对象的组合顺序满足基本的优先级和结合律,如加减优先级低于乘除,对一些模糊的最好用 () 括起,有最高优先级。
而求值顺序可能依编译器的实现来决定。
因此,有两条处理复合表达式的经验:
1 拿不准的时候用括号来强制组合顺序
2 如果改变了某个运算对象的值,那么表达式的其他地方不要使用这个运算对象
运算符分类:
算术运算符:主要是加 减 乘 除 求余等
逻辑和关系运算符:相等 不等 大于 小于 逻辑与 逻辑或(两者都是短路求值符) 逻辑非
赋值运算符:等号(左侧运算对象必须是可修改的左值,满足右结合律) 如:
int i;while ((i = get_value()) != 42){ ....}递增递减运算符:++ -- (建议使用前置版本,效率更高),如:
auto pbeg = v.begin();while (pbeg != v.end() && *beg >= 0){ cout<<*beg++<<endl;}成员访问运算符:-> .
条件运算符:cond ? expr1 : expr2 (注意,嵌套层数不超过两层)
位运算符:左移 右移 位与 位或 位异或 位求反 (仅将位运算符用于无符号类型)
sizeof 运算符:返回表达式或类型名所占字节数
逗号运算符:首先对逗号左侧表达式求值,然后将结果丢掉,在对右边表达式求值,是真正的结果
类型转换
发生隐式转换:
1 表达式中,比int小的整型首先提升至较大的整型
2 条件中,非布尔值转化为布尔类型
3 初始化过程,初始值转换成变量的值;赋值语句,右侧运算对象转换成左侧运算对象
4 算术运算或关系运算对象有多种类型,需要转换成同一类型
5 函数调用
显式转换,即强制类型转换:
1 static_cast<> 任何具有明确定义的类型转换,只要不包含底层const,都可以使用 。如将int 转换成 double,常用于将一个较大的算术类型赋给较小的类型
2 const_cast<> 只能改变运算对象的底层const,也就是去 const,常用于有函数重载的上下文中
3 reinterpret_cast<> 为运算对象的位模式提供较低层次上的重新解释
4 dynamic_cast<> 支持运行时类型识别
总结:强制类型转换干扰了正常的类型检查,因此应避免使用强制类型转换
运算符优先级表
- 我读C++ Primer - 运算符与表达式
- C 运算符与表达式
- C primer plus 5 ch5 运算符、表达式和语句
- C Primer Plus 第五章:运算符、表达式和语句
- 我的c学习:算术运算符与算术表达式 优先级
- C Primer Plus-运算符
- C中的运算符与表达式(一)
- C语言基础-----运算符与表达式
- C语言数据类型、运算符与表达式
- C语言数据类型,运算符与表达式
- C语言运算符与表达式
- c语言学习----运算符与表达式
- C--模块四--运算符与表达式
- C 碎片三 运算符与表达式
- c语言运算符与表达式
- C语言运算符与表达式
- 我的c学习:条件运算符和条件表达式
- C primer plus第5章(运算符、表达式和语句)习题
- 分享歌曲
- 同步/异步 阻塞/非阻塞
- TCP\IP三次握手连接,四次握手断开分析
- JS关键字和保留字汇总
- OC-字典常用操作(NSDictionary、NSMutableDictionary)
- 我读C++ Primer - 运算符与表达式
- javaScript操作DOM学习笔记
- ListView之SimpleAdapter的使用
- iOS开发之静态库(一)—— 基本概念
- 链表中的笔记
- 结构体
- 动态切面
- 最新资源文章分享
- 一系列优秀的Android开发资料