1. 项目概述
那是一个凌晨三点,咖啡杯已经见底,显示器上的代码还在和我玩捉迷藏。作为一个有十年C++开发经验的老兵,我竟然被一个简单的运算符优先级问题卡住了整整两个小时。这次经历让我意识到,即使是基础知识点,在实战中也藏着无数陷阱。今天,我们就从这次深夜调试的惨痛教训出发,重新审视C++中那些看似简单却暗藏玄机的运算符、表达式与语句控制。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心概念解析
2.1 运算符的隐秘世界
C++的运算符远不止加减乘除那么简单。那次深夜调试遇到的正是位运算符和比较运算符的优先级问题:
cpp复制if (status & 0xFF == 0x80) { // 这个条件永远不会成立!
// 处理特殊状态
}
问题出在==的优先级高于&,实际执行的是status & (0xFF == 0x80)。正确的写法应该是:
cpp复制if ((status & 0xFF) == 0x80) {
// 现在逻辑正确了
}
C++运算符优先级表(部分关键运算符):
| 优先级 | 运算符 | 结合性 |
|---|---|---|
| 1 | :: | 从左到右 |
| 2 | () [] -> . ++ -- | 从左到右 |
| 3 | ! ~ + - ++ -- & * | 从右到左 |
| 4 | .* ->* | 从左到右 |
| 5 | * / % | 从左到右 |
| 6 | + - | 从左到右 |
| 7 | << >> | 从左到右 |
| 8 | < <= > >= | 从左到右 |
| 9 | == != | 从左到右 |
| 10 | & | 从左到右 |
| 11 | ^ | 从左 |
