C++操作符介绍
优先级 |
运算符 |
含 义 |
示 例 |
结合方向 |
要求运算 对象的个数 |
可重载性 |
1 |
:: |
全局解析 |
::x |
自右至左 |
一元操作符 |
不可重载 |
:: |
类域解析 |
X::x |
自左至右 |
二元操作符 |
不可重载 |
|
2 |
. |
直接成员选择运算符 |
s.len |
自左至右 |
二元操作符 |
不可重载 |
( ) |
圆括号 |
|
|
可重载 |
||
( ) |
函数调用 |
rand( ) |
||||
( ) |
类型构造 |
int( ch) |
||||
[ ] |
下标运算符 |
a[i] |
二元操作符 |
|||
-> |
间接成员选择运算符 |
p->len |
二元操作符 |
|||
++ |
后增 |
n++ |
自右至左 |
一元操作符 |
||
- - |
后减 |
n- - |
一元操作符 |
|||
3 |
! |
逻辑非运算符 |
!p |
自右至左 |
一元操作符 |
可重载 |
~ |
按位取反运算符 |
~s |
||||
++ |
前增运算符 |
++n |
||||
- - |
前减运算符 |
- -n |
||||
- |
负号运算符 |
-n |
||||
* |
反引用运算符 |
*p |
||||
& |
求地址运算符 |
&x |
||||
new |
空间分配 |
new int(9) |
||||
delete |
空间释放 |
delete p |
||||
(类型) |
类型转换运算符 |
(int)ch |
二元操作符 |
|||
sizeof |
长度运算符 |
sizeof(a) |
一元操作符 |
不可重载 |
||
4 |
* |
乘法运算符 |
m*n |
自左至右 |
二元操作符 |
可重载 |
/ |
除法运算符 |
m/n |
||||
% |
求余运算符 |
m%n |
||||
5 |
+ |
加法运算符 |
m+n |
自左至右 |
二元操作符 |
可重载 |
- |
减法运算符 |
m-n |
||||
6 |
<< |
左移运算符 |
m<<n |
自左至右 |
二元操作符 |
可重载 |
>> |
右移运算符 |
m>>n |
||||
7 |
< |
小于 |
x<y |
自左至右 |
二元操作符 |
可重载 |
<= |
小于等于 |
x<=y |
||||
> |
大于 |
x>y |
||||
>= |
大于等于 |
x>=y |
||||
8 |
== |
等于运算符 |
x==y |
自左至右 |
二元操作符 |
可重载 |
!= |
不等于运算符 |
x!=y |
||||
9 |
& |
按位与运算符 |
s&t |
自左至右 |
二元操作符 |
可重载 |
10 |
^ |
按位异或运算符 |
s^t |
自左至右 |
二元操作符 |
可重载 |
11 |
| |
按位或运算符 |
s|t |
自左至右 |
二元操作符 |
可重载 |
12 |
&& |
逻辑与运算符 |
u&&v |
自左至右 |
二元操作符 |
可重载 |
13 |
|| |
逻辑或运算符 |
u||v |
自左至右 |
二元操作符 |
可重载 |
14 |
? : |
条件运算符 |
u? x : y |
自左至右 |
三元操作符 |
不可重载 |
15 |
= |
赋值运算符 |
n=22 |
自右至左 |
二元操作符 |
可重载 |
+= |
先加,再赋值 |
n+=8 |
||||
-= |
先减,再赋值 |
n-=4 |
||||
*= |
先乘,再赋值 |
n*= -1 |
||||
/= |
先除,再赋值 |
n/10 |
||||
%= |
先求余,再赋值 |
n%=10 |
||||
>>= |
先左移位,再赋值 |
n>>=1 |
||||
<<= |
先右移位,再赋值 |
N<<=1 |
||||
&= |
先按位与,再赋值 |
s&=mask |
||||
^= |
先按位异或,再赋值 |
s^=mask |
||||
|= |
先按位或,再赋值 |
s|=mask |
||||
16 |
, |
逗号运算符 |
++m,- -n |
自左至右 |
可重载 |
-
- 一元操作符可以是不带参数的成员函数或带一个参数的非成员函数。
- 二元操作符可以是带一个参数的成员函数或带两个参数的非成员函数。
- operator=、operator[]、operator()、operator->只能定义为成员函数。
- operator->的返回值必须是一个指针或能使用->的对象。
- 重载 operator++ 和 operator--时带一个 int 参数表示后缀,不带参数表示前缀。
- 除 operator new 和 operator delete 外,重载的操作符参数中至少要有一个非内建数据类型。
- 重载的的操作符应尽量模拟操作符对内建类型的行为。