C++重载运算符、左值和右值、优先级和结合律
程序员文章站
2022-06-17 19:23:39
1、重载运算符
我们使用重载运算符的时候,
运算对象的类型和返回值都是可以由该运算符定义的
但运算对象的个数、运算符的优先级和结合律是无法改变的
2、左值和右值
左值:对象的身份,在内存中的位置
右...
1、重载运算符
我们使用重载运算符的时候,
运算对象的类型和返回值都是可以由该运算符定义的
但运算对象的个数、运算符的优先级和结合律是无法改变的
2、左值和右值
左值:对象的身份,在内存中的位置
右值:对象的值(内容)
赋值运算符(=):需要左值作为左侧运算对象,得到的结果仍然是一个左值
取地址符(&):作用于一个左值运算对象,但返回的是一个指向该运算对象的指针,该指针是一个右值
内置解引用()、下标([])、迭代器解引用( )的求值结果都是左值
内置类型和迭代器的递增递减(++、–)作用于左值运算对象,其前置版本(++p)所得结果是左值
3、优先级和结合律
运算符优先级表:
优先级 | 描述 | 符号 | 结合律 |
---|---|---|---|
1 | 域 | :: | 左 |
2 | 成员选择 | . -> | 左 |
2 | 下标 | [] | 左 |
2 | 函数调用与类型构造 | () | 左 |
3 | 后置运算 | lvalue++,lvalue– | 右 |
3 | 类型id | typeid(type) | 右 |
3 | 类型转换 | cast_name< type >(expr) | 右 |
4 | 前置运算 | ++lvalue,–lvalue | 右 |
4 | 位求反,逻辑非 | ~expr,!expr | 右 |
4 | 正负性 | +expr,-expr | 右 |
4 | 解引用取地址 | *、& | 右 |
4 | 类型转换(旧)) | ()sizeof | 右 |
5 | 指向成员选择的指针 | ptr->*ptr_to_member,obj.&ptr_tomember | 右 |
6 | 算术:乘除取余 | */% | 左 |
7 | 算术:加减 | +- | 左 |
8 | 移位:向左向右 | << , >> | 左 |
9 | 关系:大于小于 | <、<=、>、>= | 左 |
10 | 关系:等不等于 | ==、!= | 左 |
11 | 位:位与 | & | 左 |
12 | 位:异或 | ^ | 左 |
13 | 位:位或 | | | 左 |
14 | 逻辑:逻辑与 | && | 左 |
15 | 逻辑:逻辑或 | || | 左 |
16 | 三元符 | ?= | 右 |
17 | 赋值 | = | 右 |
18 | 复合赋值 | *=,/=,%=,+=,-=,<<=,>>=,&=,|=,^= | 右 |
19 | 逗号 | , | 左 |
上一篇: redis中事务机制及乐观锁的实现
下一篇: mongodb启动以及基础命令