欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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 逗号