C++基础编程----4.1表达式
2015-10-16 20:48
267 查看
表达式
1.定义
表达式是由一个或多个运算对象组成,对表达式求值将得到一个结果。字面值和变量是最简单的表达式,其结果就是字面值和变量的值。将运算符和多个运算对象组合起来构成复杂的表达式。2.基本概念
2.1 函数调用是个复杂的运算符,它对运算对象的数量没有限制。2.2 使用重载运算符,运算对象类型和返回值都是由该运算符定义的,但是对于运算对象的个数、运算符优先级和结合律都是无法改变的。
2.3 左值和右值
2.3.1C++表达式要不就是左值,要不就是右值,在C语言中,为了帮助大家记忆:左值可以位于赋值语句的左侧,而右值只能位于赋值语句的右侧。
2.3.2 在C++里面就没有那么简单了,左值表达式的求值结果是一个对象,然而常量对象代表的某些左值不能位于赋值运算符的左侧运算对象。可以简单地归纳:当一个对象被用作右值的时候,用的是对象的值,当对象被用作左值的时候,用的是该对象在内存中的位置。
2.3.3 解引用运算符、下标运算符作用于左值运算对象都是左值
2.3.4 递增递减运算符其前置版本是个左值,后置版本是个右值,不能当做左值进行使用。-----不推荐将自增自减运算符和其他运算符混合使用
2.4 decltype类型
左值右值是不同的,如果表达式的求值结果是个左值,decltype作用于表达式(不是变量)得到引用类型,例如,p的类型是int * ,因为解引用运算符生成的是左值,所以decltype(*p)为int &,因为取地址运算符生成的是右值,decltype(&p)的结果是int **。
3.优先级和结合律
3.1 括号无视优先级,也就是说,在不确定的情况下,就加括号进行运算3.2 优先级表格需要看下
4.求值顺序
4.1 int i=0; cout<<i<<" "<<++i<<endl; // 错误 可能出结果,但不同编译器可能处理不同如果表达式指向并修改了同一个对象,将会引发错误并产生未定义的行为。cout<<i<<" "<<++i<<endl; 因为程序是未定义的,<<运算符没有明确规定何时对运算对象求值,是从前往后还是从后往前没定义,编译器可能先求++i再求i,也可能先求i再求++i。
4.2 有4种运算符明确规定了运算顺序,(1)逻辑与(&&),只有左侧为真才进行右侧运算(2)逻辑或(||),只有左侧为假才进行右侧运算(3)条件运算符(?:)(4)逗号运算符(,)从左向右进行求值。
4.3 *++iter的用法已经很常见了。
相关文章推荐
- Lua学习笔记之运算符和表达式
- Lua教程(三):表达式和语句
- Lua基础教程之赋值语句、表达式、流程控制、函数学习笔记
- Ruby中case表达式详解
- C#编程自学之运算符和表达式
- 理解C#中的Lambda表达式
- javascript属性访问表达式用法分析
- JavaScript中:表达式和语句的区别[译]
- js 中的switch表达式使用示例
- js表达式计算器代码
- SQLite教程(六):表达式详解
- 用PHP实现的四则运算表达式计算实现代码
- Javascript表达式中连续的 && 和 || 之赋值区别
- javascript 用函数语句和表达式定义函数的区别详解
- JavaScript表达式:URL 协议介绍
- python 中的列表解析和生成表达式
- Lua中的操作符和表达式总结
- 将数字转换成大写的人民币表达式的js函数
- php使用正则表达式获取图片url的方法
- php使用正则表达式进行字符串搜索的方法