C++ 运算符优先级

C++ 开发:运算符优先级

下表列出了C + +运算符的优先级和结合性。
运算符列出从上到下,按照优先级

这里写图片描述
解析表达式时,操作员在一些上市行上表的优先级将被绑定收紧(括号)
好像比任何运营商,其参数如下一行上市进一步优先级较低。
例如,表达式std::cout < < a和b和解析* p + +(std::cout < < b和*)&(p + +),
而不是std::cout < <(a和b)或(* p)+ +。

运算符具有相同优先级的绑定参数的方向他们的结合性。
例如,解析表达式a = b = c =(b = c),而不是(a = b)= c,
因为从右到左的结合性的任务,
但是a + b - c解析(a + b)- c而不是+(b - c),
因为从左到右结合性的加法和减法。

结合性规范是多余的一元运算符,只显示完整性:
一元前缀运算符总是把从右到左(删除+ + * p是删除(+ +(* p)))和一元后缀运算符总是把从左到右([1][2]+ +(([1])[2])+ +)。
注意,成员访问运算符的结合性是有意义的,即使他们被分组与一元后缀运算符:
a.b + +解析(a.b)+ +,而不是一个a.(b + +)。

影响操作符重载运算符优先级。

笔记

优先级和结合性是编译时概念和独立于订单的评价,这是一个运行时的概念。
标准本身并不指定优先级水平。他们是来自语法。
const_cast、static_cast dynamic_cast、reinterpret_cast类型id,sizeof……,noexcept alignof不包括因为他们从来不是模棱两可的。
一些运营商替代拼写 (e.g. , and for &&, or for ||, not for ! , 等.).

三元条件的相对优先级和C和c++之间的赋值操作符不同:
在C语言中,作业是不允许元条件运算符的右边,所以e = < d ?+ +:= d不能被解析。
许多C编译器使用一个修改语法哪里?:具有更高的优先级比=解析,
e =(((< d)?(+ +):a)= d)(然后不能编译,
因为?:从来没有在C和左值=需要左边的左值)。
在c++中,?=有同等优先级和组从右到左,这e = < d ?+ +:= d解析作为< e =((d)?(+ +):(a = d))。

这里写图片描述

### C++ 运算符优先级C++运算符优先级定义了表达式中各运算符的计算顺序。当一个复杂表达式包含多个运算符时,优先级较高的运算符会先被执行[^1]。 以下是完整的 C++ 运算符优先级列表(从高到低排列),涵盖了大部分常见的运算符: #### 单目运算符 | 优先级 | 类型 | 运算符 | |--------|--------------------|---------------------------------| | 1 | 后缀 | `()`, `[]`, `->`, `.`, `postfix ++`, `postfix --`[^5] | | 2 | 前缀 | `prefix ++`, `prefix --`, `+`, `-`, `!`, `~`, `(type)`, `*`, `&`, `sizeof`, `new`, `delete`[^3] | #### 多目运算符 | 优先级 | 类型 | 运算符 | |--------|------------------|------------------------------| | 3 | 成员访问 | `.*`, `->*` | | 4 | 求值 | `*`, `/`, `%` | | 5 | 加减法 | `+`, `-` | | 6 | 移位操作 | `<<`, `>>` | | 7 | 关系比较 | `<`, `>`, `<=`, `>=` | | 8 | 相等性判断 | `==`, `!=` | | 9 | 逻辑与 | `&` | | 10 | 逻辑异或 | `^` | | 11 | 逻辑或 | `\|` | | 12 | 条件测试 | `&&` | | 13 | 或者条件测试 | `\|\|` | | 14 | 条件表达式 | `?:` | | 15 | 赋值 | `=`, `+=`, `-=` , `*=` , `/=`, etc.| 需要注意的是,在某些情况下,即使知道了运算符优先级,仍然可能需要通过显式的括号来改变默认的求值顺序[^4]。 对于 C++17 及之后的标准版本新增的一些特殊用途运算符未在此表格中列出,例如三向比较运算符 (`<=>`) 等[^2]。 ```cpp // 示例代码展示如何利用优先级解析表达式 int a = 5, b = 3; bool result = (a + b * 2 >= 10 && !(b < 2)); // 正确理解此语句需掌握优先级规则 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值