表达式和语句
表达式由操作数和运算符构成,操作数本身也可以是一个表达式。
表达式后加分号就构成了语句。
C++ 中的运算符优先级
- 运算符优先级决定了运算符用于值的顺序。
- C++ 运算符共分为 18 个组别。组别越小优先级越高。
- 如果两个运算符被用于同一个操作数,则首先应用优先级高的运算符。
- 如果两个运算符的优先级相同,则 C++ 使用结合性规则来决定哪个运算符先结合。
- 同一组运算符的优先级和结合性相同。
- 从左到右的结合性比表示首先应用最左边的运算符,而从右到左的结合性表示首先应用最右边的运算符。
- 计算时,()的优先级最高,算术>关系>逻辑>条件>赋值>逗号(并非绝对)。
- 单目运算符>双目运算符>三目运算符(并非绝对)。
- 不清楚具体的优先级和结合性的话,可以加()。
| 运算符 | 结合性 | 含义 |
| 优先级第一组 | ||
| :: | 作用域解析运算符 | |
| 优先级第二组 | ||
| (表达式) | 分组 | |
| () | L-R | 函数调用 |
| () | 值构造,即 type(expr) | |
| [] | 数组下标 | |
| -> | 间接成员运算符 | |
| . | 直接成员运算符 | |
| const_cast | 专用的类型转换 | |
| dynamic_cast | 专用的类型转换 | |
| reinterpret_cast | 专用的类型转换 | |
| static_cast | 专用的类型转换 | |
| typeid | 类型标识 | |
| ++ |
加 1 运算符,后缀 | |
| -- | 减 1 运算符,后缀 | |
| 优先级第三组(全是一元运算符) | ||
| ! | R-L | 逻辑非 |
| ~ | 位非 | |
| + |
一元加号,正号 | |
| - | 一元减号,负号 | |
| ++ | 加 1 运算符,前缀 | |
| -- | 减 1 运算符,前缀 | |
| & | 地址 | |
| * | 解除引用(间接值) | |
| () | 类型转换,即 (type)expr | |
| sizeof | 长度,以字节为单位 | |
| new | 动态分配内存 | |
| new [] | 动态分配数组 | |
| delete | 动态释放内存 | |
| delete |
动态释放数组 | |
| 优先级第四组 | ||
| .* | L-R | 成员解除引用 |
| ->* | 间接成员解除引用 | |
| 优先级第五组(全是二元运算符) | ||
| * | L-R | 乘 |
| / | 除 | |
| % | 模(余数) | |
| 优先级第六组(全是二元运算符) | ||
| + | L-R | 加 |
| - | 减 | |
| 优先级第七组 | ||
| << | L-R | 左移 |
| >> | 右移 | |
| 优先级第八组 | ||
| < | L-R | 小于 |
| <= | 小于或等于 | |
| >= | 大于或等于 | |
| > | 大于 | |
| 优先级第九组 | ||
| == | L-R | 等于 |
| != | 不等于 | |
| 优先级第十组(一元运算符) | ||
| & | L-R | 按位 AND |
| 优先级第十一组 | ||
| ^ | L-R | 按位 XOF(异或) |
| 优先级第十二组 | ||
| | | L-R | 按位 OR |
| 优先级第十三组 | ||
| && | L-R | 逻辑 AND |
| 优先级第十四组 | ||
| || | L-R | 逻辑 OR |
| 优先级第十五组 | ||
| ?: | R-L | 条件 |
| 优先级第十六组 | ||
| = | R-L | 简单赋值 |
| *= | 乘并赋值 | |
| /= | 除并赋值 | |
| %= | 求模并赋值 | |
| += | 加并赋值 | |
| -= | 减并赋值 | |
| &= | 按位 AND 并赋值 | |
| ^= | 按位 XOR 并赋值 | |
| |= | 按位 OR 并赋值 | |
| <<= | 左移并赋值 | |
| >>= |
右移并赋值 | |
| 优先级第十七组 | ||
| throw | L-R | 引发异常 |
| 优先级第十八组 | ||
| , | L-R | 将两个表达式合并为一个 |
本文深入探讨了C++中的表达式和语句概念,详细解释了运算符的优先级和结合性规则,以及从作用域解析到类型转换的各种运算符。通过了解这些核心内容,读者可以更准确地控制C++代码的执行流程。
724

被折叠的 条评论
为什么被折叠?



