c++运算符
//少年遥想得山田,请赶在日落下山前。
定义:运算符是一种告诉编译器执行特定的数学或逻辑操作的符号,C++ 内置了丰富的运算符。
目录
-
基础知识
- 基本概念
- 组合运算符和运算对象
- 重载运算符
- 左值和右值
- 求值顺序,优先级,结合律
-
算数运算符
-
关系运算符
-
逻辑运算符
-
位运算符
-
赋值运算符
-
条件运算符
-
sizeof运算符
-
成员访问运算符
-
逗号运算符
-
类型转换
-
运算符的优先级
1.基础知识
1.1基本概念:
- C++定义了单目运算符,双目运算符和三目运算符,作用于一个运算对象的叫单目运算符,例如:解引用(*)和去地址符(&),以此类推。函数调用也是一种特殊的运算符,它对对象的数量没有什么要求。
- 有些符号既能做单目运算符也能做双目运算符,例如 * 作为单目运算符执行解引用操作,作为双目运算符执行乘法运算操作。对于这种符号,两种操作毫不相干,完全可以当做两个不同的符号。
1.2组合运算符和运算对象
- 对于含有多个运算符的表达式,要明白它的含义,首先要学习运算符优先级,结合律以及运算对象的求值顺序。
1.3重载运算符
- c++语言定义了运算符作用于内置类型和复合类型的运算对象,当运算符作用于类类型的运算对象时,用户可以自行定义其含义,用为这种自定义过程事实上是为已存在的运算符赋予另外一层含义,所以称为重载运算符。IO库的>>和<<就是重载运算符.
1.4左值和右值
- C++的表达式要么是左值要么是右值.例:左值可以位于赋值语句的左侧,右值则不可以。归纳:当一个对象被用做右值,用的是对象的值(内容),当对象被用于左值得时候,用的是对象的身份(在内存中的位置);
- 不同的运算符对运算对象的要求各不相同,有的需要左值运算对象,有的则需要右值运算对象,返回值也各有差异。一个重要的原则是:在需要右值的时候可以用左值来替代,但是不能把右值当做左值(也就是位置)使用,实际使用的是他的内容(值)。
1.5求值顺序,优先级,结合律
1.5.1复合表达式
- 复合表达式是指含有两个或者多个运算符的表达式,求解复合表达式首先要把运算符和运算对象合理的组合起来,优先级和结合律决定了运算对象的组合方式,有括号的表达式可以忽略上述规则。
- 一般来说表达式最终的值依赖于其子表达式的组合方式,高优先级运算符的运算对象要比低优先级运算符的运算对象更紧密的组合在一起。如果优先级相同,则组合方式由结合律决定。例如乘法除法运算符的优先级高于加法减法,所以乘除法运算符的运算符的运算对象先组合再考虑加减法的运算对象,算术运算遵循左结合律,优先级相同时从左到右运算。
- 例如:2+3*4表达式的值是14而不是20。
- 例如:5-3-1表达式的值是1而不是3。
<