C/C++ 运算符优先级

目录

运算符优先级

算术运算子

比较运算子

位元运算子

其它运算子


所有的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++20auto 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) ...
16c?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;
18throw抛出异常throw EClass("Message");
19,逗号运算子for (i = 0, j = 0; i < 10; i++, j++) …由左至右

算术运算子

运算子名称语法可重载C语言里有
一元正号+a
加法(总和)+ b
前缀递增++a
后缀递增a++
以加法赋值+= b
一元负号(取反)-a
减法(差)- b
前缀递减--a
后缀递减a--
以减法赋值-= b
乘法(乘积)* b
以乘法赋值*= b
除法(分之)/ b
以除法赋值/= b
模数(馀数)% b
以模数赋值%= b

比较运算子

运算子名称语法可重载C语言里有
小于< b
小于或等于<= b
大于> b
大于或等于>= b
不等于!= b
等于== b
逻辑取反!a
逻辑 AND&& b
逻辑 OR|| b
三路比较<=> b

位元运算子

运算子名称语法可重载​​​​​​​C语言里有
位元左移<< b
以位元左移赋值<<= b
位元右移>> b
以位元右移赋值>>= b
位元一的补数~a
位元 AND& b
以位元 AND 赋值&= b
位元 OR| b
以位元 OR 赋值|= b
位元 XOR^ b
以位元 XOR 赋值^= b

其它运算子

运算子名称语法可重载​​​​​​​C语言里有
基本赋值= b
函式呼叫a()
阵列下标a[b]
间接(向下参考)*a
的位址(参考)&a
成员指标a->b
成员a.b
间接成员指标a->*b
间接成员a.*b
转换(type) a​​​​​​​
逗号, b
三元条件? b : c
作用域解析a::b
的大小sizeof a
类型识别typeid type​​​​​​​​​
分配储存区new type​​​​​​​
解除分配储存区delete a
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rockwood573

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值