如果这个工具帮到了你,可以请作者喝杯咖啡 ☕
快速查询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++运算符的优先级数值与结合性方向(左结合或右结合),通过动态表格和搜索输入,将原本需要翻阅标准文档的步骤简化为即时在线查询,输出该运算符的排名、结合性及典型用法,让表达式求值顺序一目了然。
==、&&、>>,或输入中文关键词如“逻辑与”。*,输出优先级 5,结合性“左结合”,说明“乘法/解引用”。::优先级为1(最高),逗号运算符优先级为17(最低)。a = b = c 能正确赋值? 结合性决定了运算方向。赋值运算符 = 是右结合,因此 a = b = c 被理解为 a = (b = c)。查询结果会明确标注每个运算符的结合性,避免误读。本工具基于ISO C++标准所列运算符及其优先级,适用于 C++98 至 C++23 主要版本,但不包含编译器特定扩展。输入搜索时请使用半角符号,中文翻译关键词仅供参考。结果仅作为编码参考,实际表达式建议多加括号以增加可读性。本工具为纯前端查询,不会保存或上传您的查询内容,请放心使用。如果输入符号未被识别,请检查拼写或直接浏览完整优先级列表。
运算符优先级与结合性在重载运算符时依然成立,您无法通过重载改变其优先级。在模板元编程或宏定义中,合理使用括号比依赖默认优先级更加安全。典型例子:cout << a & b; 会因为位与 & 优先级低于移位而引发编译错误,应写成 cout << (a & b);。若不确定某个运算符的相对顺序,随时用本工具对照优先级表,可有效避免此类优先级陷阱。