跳到主要内容

C++运算符手册

C++ 运算符详解表

说明: 表格按优先级从高到低排序(优先级 1 为最高)。同一行内的运算符具有相同优先级,结合性决定了求值顺序。

优先级运算符名称/描述用法示例结 合 性
1::全局作用域 / 类作用域解析std::cout, ClassName::member从左到右
2a++ a--后置自增 / 自减a++, b--从左到右
()函数调用func(x, y)
[]数组下标arr[5]
. ->成员访问 (对象) / (指针)obj.member, ptr->member
typeid const_cast dynamic_cast
reinterpret_cast static_cast
类型转换与查询static_cast<float>(x), typeid(obj).name()
3++a --a前置自增 / 自减++a, --b从右到左
+a -a一元正号 / 负号-x, +y
! ~逻辑非 / 按位取反!flag, ~bits
(type)C风格强制类型转换(int)value
*ptr &var解引用 / 取地址*p, &var
sizeof取大小(编译时求值)sizeof(int), sizeof arr
new new[] delete delete[]动态内存分配 / 释放new int, delete p, new int[10]
co_awaitawait 表达式 (协程)co_await task
4.* ->*成员指针访问 (对象 / 指针)obj.*ptr, pmf->*ptr从左到右
5a*b a/b a%b乘 / 除 / 取模5 * 3, 10 / 2, 11 % 3从左到右
6a+b a-b加 / 减5 + 3, 10 - 2从左到右
7<< >>按位左移 / 按位右移flags << 2, bits >> 3从左到右
8<=> (C++20)三路比较 (飞船运算符)a <=> b从左到右
9< <= > >=关系运算符:小于 / 小于等于 / 大于 / 大于等于a < b, x >= 10从左到右
10== !=关系运算符:等于 / 不等于a == b, x != nullptr从左到右
11&按位与flags & mask从左到右
12^按位异或bits ^ key从左到右
13|按位或flags | new_bits从左到右
14&&逻辑与 (短路求值)cond1 && cond2从左到右
15||逻辑或 (短路求值)cond1 || cond2从左到右
16? :三元条件运算符condition ? expr1 : expr2从右到左
=赋值a = 5
+= -= *= /= %= <<= >>= &= ^= |=复合赋值运算符a += 5 (等价于 a = a + 5)
throwthrow 运算符throw std::runtime_error("Oops")
17,逗号运算符 (顺序求值)i=0, j=0, ++i
(返回最后一个表达式的值)
从左到右

补充说明表:特殊运算符用法

运算符名称/描述详细说明与注意事项
a % b取模 (Modulus)返回除法后的余数。操作数必须是整数类型。结果的符号与 C++ 实现相关,通常与被除数 (a) 相同。
a << b a >> b位移 (Bit Shift)a 的二进制位向左或向右移动 b 位。b 为负值或大于位数的情况,行为未定义。常用于乘除2的幂次或位操作。
&& ||逻辑与/或 (Logical AND/OR)短路求值 (Short-circuit evaluation)&& 左边为假则不计算右边;|| 左边为真则不计算右边。
& | ^ ~位运算符 (Bitwise)按位操作:与(&)、或(|)、异或(^)、取反(~)。操作数通常是整数类型或枚举类型
typeid类型标识 (Type Identification)返回 std::type_info 常量对象的引用,包含类型信息。操作数可以是类型名或表达式。需包含 <typeinfo>
dynamic_cast<Type>(expr)动态转换 (Dynamic Cast)主要用于在继承层次结构中进行安全的向下转换 (downcast)。需要运行时类型信息 (RTTI),基类必须有虚函数
static_cast<Type>(expr)静态转换 (Static Cast)用于明确定义的转换,如非浮点算术转换、派生类到基类、void* 到其他指针等。编译时检查
reinterpret_cast<Type>(expr)重解释转换 (Reinterpret Cast)低级别的重新解释位模式。极其不安全,例如将指针转换为整数,或将一种指针转换为另一种不相关的指针。
const_cast<Type>(expr)常量转换 (Const Cast)唯一能移除或添加 constvolatile 属性的运算符。常用于函数重载或与旧式 C 代码交互。
new / delete动态内存管理new 分配内存并调用构造函数,delete 调用析构函数并释放内存。必须配对使用,否则会导致内存泄漏。
new[] / delete[]动态数组管理new[] 分配数组,delete[] 释放数组。必须严格配对使用new[] 对应 delete[]new 对应 delete
co_await协程等待 (C++20)挂起当前协程的执行,等待某个计算完成。是 C++20 协程的核心操作之一。
<=>三路比较 (Spaceship) (C++20)一次性比较两个对象,返回一个表示小于、等于或大于的类别类型(如 std::strong_ordering)。简化了比较运算符的重载。

计算机的基本构成

*学习笔记

暂没有学习笔记,快来抢first blood !