目录
运算符优先级
算术运算子
比较运算子
位元运算子
其它运算子
所有的C语言运算符都被C++语言支持。C语言不支持运算符重载。
在不重载时,运算符&&、||、,(逗号运算符),在第一个操作数求值之后有一个顺序点。
大部分C与C++运算符也可用于其它程序设计语言如C#。
运算符优先级
优先级 | 运算子 | 叙述 | 示例 | 重载性 | 结合性 |
---|
1 | :: | 作用域解析(C++专有) | Class::age = 2; | 否 | 由左至右 |
2 | ++ | 后缀递增 | i++ | |
-- | 后缀递减 | i-- | |
() | 函数调用或函数调用形式的类型转换 | int x = f(); | |
[] | 数组访问 | array[4] = 2; | |
. | 以对象方式访问成员 | obj.age = 34; | 否 |
-> | 以指针方式访问成员 | ptr->age = 34; | |
dynamic_cast | 运行时检查类型转换(C++专有) | Y& y = dynamic_cast<Y&>(x); | 否 |
static_cast | 未经检查的类型转换(C++专有) | Y& y = static_cast<Y&>(x); | 否 |
reinterpret_cast | 重定义类型转换(C++专有) | int const* p = reinterpret_cast<int const*>(0x1234); | 否 |
const_cast | 更改非常量属性(C++专有) | int* q = const_cast<int*>(p); | 否 |
typeid | 获取类型信息(C++专有) | std::type_info const& t = typeid(x); | 否 |
3 | ++ | 前缀递增 | ++i | | 由右至左 |
-- | 前缀递减 | --i | |
+ | 一元正号 | int i = +1; | |
- | 一元负号 | int i = -1; | |
!
not | 逻辑非
! 的备用拼写 | if (!done) … | |
~
compl | 按位取反
~ 的备用拼写 | flag1 = ~flag2; | |
(type) | 强制类型转换 | int i = (int)floatNum; | |
* | 取指针指向的值 | int data = *intPtr; | |
& | 取变量的地址 | int *intPtr = &data; | |
sizeof | 某某的大小 | size_t s = sizeof(int); | 否 |
new | 动态内存分配(C++专有) | long* pVar = new long; | |
new[] | 动态数组内存分配(C++专有) | long* array = new long[20]; | |
delete | 动态内存释放(C++专有) | delete pVar; | |
delete[] | 动态数组内存释放(C++专有) | delete [] array; | |
4 | .* | 成员对象选择(C++专有) | obj.*var = 24; | 否 | 由左至右 |
->* | 成员指针选择(C++专有) | ptr->*var = 24; | |
5 | * | 乘法 | int i = 2 * 4; | |
/ | 除法 | float f = 10.0 / 3.0; | |
% | 模数(取余数) | int rem = 4 % 3; | |
6 | + | 加法 | int i = 2 + 3; | |
- | 减法 | int i = 5 - 1; | |
7 | << | 位元左移 | int flags = 33 << 1; | |
>> | 位元右移 | int flags = 33 >> 1; | |
8 | <=> | 三路比较(C++20) | auto flags = 33 <=> 1; | |
9 | < | 小于关系 | if (i < 42) … | |
<= | 小于等于关系 | if (i <= 42) ... | |
> | 大于关系 | if (i > 42) … | |
>= | 大于等于关系 | if (i >= 42) ... | |
10 | == | 等于关系 | if (i == 42) ... | |
!=
not_eq | 不等于关系
!= 的备用拼写 | if (i != 42) … | |
11 | &
bitand | 位元 AND
& 的备用拼写 | flag1 = flag2 & 42; | |
12 | ^
xor | 位元 XOR(独占or)
^ 的备用拼写 | flag1 = flag2 ^ 42; | |
13 | |
bitor | 位元 OR(包含or)
| 的备用拼写 | flag1 = flag2 | 42; | |
14 | &&
and | 逻辑 AND
&& 的备用拼写 | if (conditionA && conditionB) … | |
15 | ||
or | 逻辑 OR
|| 的备用拼写 | if (conditionA || conditionB) ... | |
16 | c?t:f | 三元条件运算 | int i = a > b ? a : b; | 否 | 由右至左 |
17 | = | 直接赋值 | int a = b; | |
+= | 以和赋值 | a += 3; | |
-= | 以差赋值 | b -= 4; | |
*= | 以积赋值 | a *= 5; | |
/= | 以商赋值 | a /= 2; | |
%= | 以取余数赋值 | a %= 3; | |
<<= | 以位元左移赋值 | flags <<= 2; | |
>>= | 以位元右移赋值 | flags >>= 2; | |
&=
and_eq | 以位元AND赋值
&= 的备用拼写 | flags &= new_flags; | |
^=
xor_eq | 以位元XOR赋值
^= 的备用拼写 | flags ^= new_flags; | |
|=
or_eq | 以位元OR赋值
|= 的备用拼写 | flags |= new_flags; | |
18 | throw | 抛出异常 | throw EClass("Message"); | 否 | |
19 | , | 逗号运算子 | for (i = 0, j = 0; i < 10; i++, j++) … | | 由左至右 |
算术运算子
运算子名称 | 语法 | 可重载 | C语言里有 |
---|
一元正号 | +a | 是 | 是 |
加法(总和) | a + b | 是 | 是 |
前缀递增 | ++a | 是 | 是 |
后缀递增 | a++ | 是 | 是 |
以加法赋值 | a += b | 是 | 是 |
一元负号(取反) | -a | 是 | 是 |
减法(差) | a - b | 是 | 是 |
前缀递减 | --a | 是 | 是 |
后缀递减 | a-- | 是 | 是 |
以减法赋值 | a -= b | 是 | 是 |
乘法(乘积) | a * b | 是 | 是 |
以乘法赋值 | a *= b | 是 | 是 |
除法(分之) | a / b | 是 | 是 |
以除法赋值 | a /= b | 是 | 是 |
模数(馀数) | a % b | 是 | 是 |
以模数赋值 | a %= b | 是 | 是 |
比较运算子
运算子名称 | 语法 | 可重载 | C语言里有 |
---|
小于 | a < b | 是 | 是 |
小于或等于 | a <= b | 是 | 是 |
大于 | a > b | 是 | 是 |
大于或等于 | a >= b | 是 | 是 |
不等于 | a != b | 是 | 是 |
等于 | a == b | 是 | 是 |
逻辑取反 | !a | 是 | 是 |
逻辑 AND | a && b | 是 | 是 |
逻辑 OR | a || b | 是 | 是 |
三路比较 | a <=> b | 是 | 否 |
位元运算子
运算子名称 | 语法 | 可重载 | C语言里有 |
---|
位元左移 | a << b | 是 | 是 |
以位元左移赋值 | a <<= b | 是 | 是 |
位元右移 | a >> b | 是 | 是 |
以位元右移赋值 | a >>= b | 是 | 是 |
位元一的补数 | ~a | 是 | 是 |
位元 AND | a & b | 是 | 是 |
以位元 AND 赋值 | a &= b | 是 | 是 |
位元 OR | a | b | 是 | 是 |
以位元 OR 赋值 | a |= b | 是 | 是 |
位元 XOR | a ^ b | 是 | 是 |
以位元 XOR 赋值 | a ^= b | 是 | 是 |
其它运算子
运算子名称 | 语法 | 可重载 | C语言里有 |
---|
基本赋值 | a = b | 是 | 是 |
函式呼叫 | a() | 是 | 是 |
阵列下标 | a[b] | 是 | 是 |
间接(向下参考) | *a | 是 | 是 |
的位址(参考) | &a | 是 | 是 |
成员指标 | a->b | 是 | 是 |
成员 | a.b | 否 | 是 |
间接成员指标 | a->*b | 是 | 否 |
间接成员 | a.*b | 否 | 否 |
转换 | (type) a | 是 | 是 |
逗号 | a , b | 是 | 是 |
三元条件 | a ? b : c | 否 | 是 |
作用域解析 | a::b | 否 | 否 |
的大小 | sizeof a | 否 | 是 |
类型识别 | typeid type | 否 | 否 |
分配储存区 | new type | 是 | 否 |
解除分配储存区 | delete a | 是 | 否 |