工具用的顺手吗?
你的反馈能帮助我们做得更好
快速查询C++运算符优先级与结合性,辅助理解复杂表达式求值顺序。
此表是收录语法的参考子集,不执行或验证示例。数字是本站分组,不能替代所用语言版本的完整语法、类型和求值规则;例子保留原始代码与字面值。 参考来源
::作用域解析左结合限定命名空间、类或枚举的成员,如 std::cout、Foo::bar。
std::vector<int>a++后置运算左结合返回当前值后将变量加 1。
i++a--后置运算左结合返回当前值后将变量减 1。
i--type()后置运算左结合通过类似构造函数调用的形式进行类型转换。
int(3.14)type{}后置运算左结合C++11 起使用花括号进行类型转换或临时对象初始化。
double{1}a()后置运算左结合调用函数、函数对象或仿函数。
std::printf("hi")a[]后置运算左结合访问数组、容器或重载了 operator[] 的对象的元素。
arr[0].后置运算左结合访问对象的非指针成员(字段、方法)。
obj.name->后置运算左结合通过指针访问对象的成员,等价于 (*p).x。
p->next++a一元运算右结合先将变量加 1,再返回新值。
++i--a一元运算右结合先将变量减 1,再返回新值。
--i+a一元运算右结合返回操作数的值,触发整型提升。
+x-a一元运算右结合返回操作数的相反数。
-x!一元运算右结合对布尔值取反,0/false 变为 true,否则为 false。
!ready~一元运算右结合对整数按位取反,每一位 0 变 1、1 变 0。
~mask(type)一元运算右结合将表达式显式转换为目标类型,能力强但安全性低。
(int)3.14*a一元运算右结合读取指针指向的对象。
*p&a一元运算右结合获取对象在内存中的地址。
&valuesizeof一元运算右结合返回类型或表达式占用的字节数,编译期求值。
sizeof(int)co_await一元运算右结合C++20 起暂停协程并等待 awaitable 的结果。
co_await tasknew一元运算右结合在堆上分配并构造对象,返回指针。
new int(5)new[]一元运算右结合在堆上分配数组并构造元素。
new int[10]delete一元运算右结合析构并释放由 new 分配的单个对象。
delete pdelete[]一元运算右结合析构并释放由 new[] 分配的数组。
delete[] arr.*成员指针左结合通过成员指针访问对象的成员。
(obj.*memPtr)->*成员指针左结合通过指针和成员指针访问对象的成员。
(ptr->*memPtr)*乘除取余左结合两个操作数相乘。
a * b/乘除取余左结合整数除法向零截断;浮点除法保留小数。
10 / 3%乘除取余左结合返回整数相除的余数,操作数必须为整型。
10 % 3+加减运算左结合两个数值相加,或指针与整数相加。
a + b-加减运算左结合两数相减,或两个指针相减得到偏移量。
a - b<<位移运算左结合整数按位左移,或在 iostream 中表示流输出。
1 << 3>>位移运算左结合整数按位右移,或在 iostream 中表示流输入。
8 >> 2<=>三路比较左结合C++20 起返回 std::strong_ordering / weak_ordering / partial_ordering。
a <=> b<关系运算左结合比较两个操作数,左小于右返回 true。
a < b<=关系运算左结合左小于或等于右返回 true。
a <= b>关系运算左结合比较两个操作数,左大于右返回 true。
a > b>=关系运算左结合左大于或等于右返回 true。
a >= b==相等判断左结合判断两个值是否相等。
a == b!=相等判断左结合判断两个值是否不相等。
a != b&按位运算左结合两个整数按位执行逻辑与。
a & b^按位运算左结合两个整数按位执行异或,相同为 0,不同为 1。
a ^ b|按位运算左结合两个整数按位执行逻辑或。
a | b&&逻辑运算左结合短路逻辑与:左操作数为 false 时不计算右操作数。
a && b||逻辑运算左结合短路逻辑或:左操作数为 true 时不计算右操作数。
a || b?:条件运算右结合根据条件返回两个表达式之一。
x > 0 ? 1 : -1throw条件运算右结合抛出异常对象,由匹配的 catch 捕获。
throw std::runtime_error("err")co_yield条件运算右结合C++20 起从生成器协程中产出一个值。
co_yield value=赋值运算右结合将右操作数的值赋给左操作数。
x = 10+=赋值运算右结合x = x + y 的简写。
x += 1-=赋值运算右结合x = x - y 的简写。
x -= 1*=赋值运算右结合x = x * y 的简写。
x *= 2/=赋值运算右结合x = x / y 的简写。
x /= 2%=赋值运算右结合x = x % y 的简写。
x %= 3<<=赋值运算右结合x = x << y 的简写。
x <<= 2>>=赋值运算右结合x = x >> y 的简写。
x >>= 2&=赋值运算右结合x = x & y 的简写。
x &= 0xFF^=赋值运算右结合x = x ^ y 的简写。
x ^= mask|=赋值运算右结合x = x | y 的简写。
x |= 0x01,逗号运算左结合依次求值左、右操作数,结果为右操作数的值。常用于 for 语句的步进表达式。
for (int i=0,j=9; i<j; ++i,--j)概览
了解工具能解决的问题、计算或处理逻辑,以及数据边界。
这个查询器将 C++ 运算符按结合强弱分组,供你检索符号、名称、说明和示例。页面还可按类别、结合性筛选;不输入关键词时可以浏览整张表。表中级别数字越小,分组时通常越紧密;这是工具为便于查表使用的编号,不是 C++ 标准规定的数值。
“优先级”说明相邻的不同运算符怎样组成表达式。例如乘法比加法优先,因此 a + b * c 按 a + (b * c) 分组。“结合性”处理同一优先级连续出现时的语法分组,例如赋值通常从右侧分组:a = b = c 对应 a = (b = c)。它们描述解析分组,不等于运行时各操作数的求值先后顺序。
C++标准通过表达式语法体现这些关系,并不为每个运算符指定一个可计算的“优先级分数”。因此页面级别适合快速比较,不应当被理解为标准编号。重载运算符也不会改变其语法优先级;若表达式容易误读,显式括号通常更清楚。
优先级级别较小 → 分组更紧;相同级别 → 参考结合性;括号 → 明确指定子表达式。
指南
按步骤完成操作,并通过示例核对输入与结果。
在关键词框输入运算符符号或表内名称的一部分,例如 &&、<< 或“赋值”。搜索会匹配符号、名称、说明、示例及级别;使用半角符号更容易与表格条目对应。
需要时选择类别(如关系、位运算、逻辑或赋值)和结合性(左、右或无)。筛选条件可以叠加;结果为空时先清除筛选,再检查关键词是否写成了表格采用的符号。
查看结果中的级别、结合性和简述,再把目标表达式按规则补上括号。例如 x + y * z 可写成 x + (y * z),以显式表达乘法先组合的意思。
如果查表后的分组与预期不同,不要只凭级别改写复杂表达式;先给目标部分加括号,再检查类型、短路行为和求值顺序等其他语言规则。
场景
查看这项工具在不同工作与生活流程中的用法。
维护代码时,先查出同一表达式里的相关符号,再通过括号还原语法分组,减少把视觉顺序当成执行顺序的误会。
讲师可用乘法与加法、赋值链等例子说明优先级和结合性是两种规则,并让学习者先预测括号结构再查表。
评审者发现多层混合运算时,可引用查表结果讨论是否加括号。括号能突出作者意图,即使语言规则本身已经足以确定分组。
问答
集中解答高频疑问与容易混淆的问题。
相反:在本表的编号中数字越小,分组越紧。编号只是展示排序,不是标准赋予的数值。
不决定。优先级和结合性决定语法分组;函数调用或运算操作数的求值先后由另外的 C++ 规则决定。
不能。重载为运算符提供类型相关的操作含义,但运算符在表达式中的语法分组规则不因此改变。
检查是否使用半角符号,并清除类别或结合性筛选。也可以搜索名称、说明中的词,或清空关键词浏览完整列表。
须知
使用前了解适用范围、结果限制与必要提醒。
本表是语法分组速查,不是编译器,也不检查类型是否合法、变量是否初始化、是否存在未定义行为或表达式是否符合你的业务意图。尤其要区分“解析成什么结构”和“运行时怎样求值”。涉及复杂逻辑时,使用括号并通过目标编译器与测试代码核实。
推荐
查找相关工具、专题与可用的 API 能力。