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++) …
|
由左至右 |
参考文献: