乐宁工具

C++ 运算符对照表

免费使用 超详细版 可复制

C++ 运算符完整速查表,涵盖算术、关系、逻辑、位运算、赋值、指针(* & ->)、内存管理(new/delete/sizeof)、四种类型转换、运算符重载、C++20 三路比较 <=>、优先级等全部内容。

分类运算符名称示例代码结果说明 / 注意事项
算术运算符
+加法int a = 3 + 2; // 5也可用于指针算术:p+1 指向下一个元素
-减法int a = 5 - 3; // 2指针相减得距离(元素个数)
*乘法int a = 4 * 3; // 12不要与解引用 * 混淆(看操作数个数)
/除法5 / 2; // 2整数除法截断;浮点除法保留小数
%取模7 % 3; // 1C++11 起负数取模结果符号由被除数决定
++自增int a=5; a++; // 6前缀先加后用,后缀先用后加;重载时性能有差异
--自减int a=5; a--; // 4
关系运算符
==等于5 == 5 // trueC++ 中对象比较默认比较成员(需重载 ==)
!=不等于5 != 3 // true
>大于5 > 3 // true
<小于3 < 5 // true
>=大于等于5 >= 5 // true
<=小于等于3 <= 5 // true
逻辑运算符
&&逻辑与(短路)true && false // false左为 false 时右表达式不求值
||逻辑或(短路)true || false // true左为 true 时右表达式不求值
!逻辑非!true // false
位运算符
&按位与5 & 3 // 1 (0101&0011=0001)对应位都为1才为1
|按位或5 | 3 // 7 (0111)
^按位异或5 ^ 3 // 6 (0110)相同为0,不同为1;异或自身得0(可用于交换)
~按位取反~5 // -6所有位取反,补码表示
<<左移5 << 1 // 10左移n位 = 乘以2^n;左移位数≥类型宽度未定义
>>右移-8 >> 1 // -4有符号右移:负数结果由实现定义(通常算术右移)
赋值运算符
=赋值int a = 10;C++ 中 = 可重载,注意深浅拷贝
+= -= *= /= %=复合赋值a += 3; // a=a+3返回左值引用,可链式:a += b += c
&= |= ^=位运算赋值a &= 3;
<<= >>=位移赋值a <<= 1;
指针/地址运算符
&取地址int* p = &a;获取变量地址
*解引用int v = *p;访问指针指向的值;空指针解引用未定义行为
->成员访问p->field等价于 (*p).field
[]下标arr[0] = 10;可重载;a[b] 等价于 *(a+b)
内存管理
new动态分配int* p = new int(10);C++ 中 new 可重载;失败抛 bad_alloc
new[]数组分配int* p = new int[100];配对使用 delete[]
delete释放delete p;释放单个对象;配对 new
delete[]释放数组delete[] p;必须配对 new[],否则未定义行为
sizeof大小查询sizeof(int) // 通常4编译期常量;对指针得指针大小,对数组得总字节
类型转换
(T)C风格强转int a = (int)3.14;不推荐,绕过类型系统
static_cast静态转换int a = static_cast<int>(3.14);编译期检查,无运行时开销
dynamic_cast动态转换Derived* d = dynamic_cast<Derived*>(b);运行时检查,仅对多态类型有效;失败返回nullptr
const_cast去constint* p = const_cast<int*>(&c);去除或添加 const/volatile 限定
reinterpret_cast重解释void* p = reinterpret_cast<void*>(addr);最低安全级别,按位重解释
特殊运算符
::作用域解析std::cout访问命名空间、类静态成员
: : :全局作用域::globalVar强制从全局命名空间查找
?:三元a>b?a:b可嵌套;C++11 起返回类型可不同(通用引用场景)
,逗号a=1, b=2, a+b从左到右求值,返回最后一个表达式的值
运算符重载
operator+ 等重载MyInt operator+(const MyInt&, const MyInt&)可重载大部分运算符;不能重载 :: . .* ?: sizeof typeid
C++20 新
<=>三路比较auto r = a <=> b;返回 std::strong_ordering 等;可自动生成 == < > 等
优先级(高→低)
::作用域std::max最高
++ -- () [] . -> (T)单目/后缀*p++ / a[b]
++ -- ! ~ & * + -单目前缀!flag / ~a / *p
.* ->*成员指针p->*m
* / %乘除模a*b/c
+ -加减a+b
<< >>位移a<<2
< <= > >=关系a>b
== !=相等a==b
&按位与a&b
^按位异或a^b
|按位或a|b
&&逻辑与a&&b
||逻辑或a||b
?:三元a?b:c右结合
= += 等赋值a=b=c从右向左结合
优先级(最低)
,逗号a=1,b=2最低优先级

C++ 运算符注意事项

  • new 失败抛 std::bad_alloc(不返回 nullptr);new(std::nothrow) 才返回 nullptr
  • deletenew 配对,delete[]new[] 配对,混用是未定义行为
  • • 整数除法 / 截断小数;% 负数结果符号由实现定义(C++11 起由被除数决定)
  • • 指针算术:p+1 移动一个元素大小,不是 1 字节;void* 不能做算术
  • static_cast 优先于 C 风格强转;reinterpret_cast 最危险,慎用
  • dynamic_cast 仅对含虚函数的多态类型有效,开销来自 RTTI
  • • 运算符重载必须至少有一个操作数为用户定义类型,不能重载 :: . .* ?: sizeof typeid
  • <=>(C++20)三路比较可让编译器自动生成 == < > <= >=
  • sizeof 是编译期运算符,对表达式不求值(sizeof(*(int*)0) 合法)

指针要点

* 解引用 & 取地址;空指针解引用是 UB;优先用智能指针

new/delete

必须配对使用;推荐用 unique_ptr / make_shared 替代裸指针

四种cast

static_cast 编译期;dynamic_cast 运行期;const_cast 去const;reinterpret_cast 重解释

C++20 <=>

三路比较运算符,自动生成全部关系运算符,减少样板代码