条件判断 if-else
if/else if/else、三目运算符、= vs == 陷阱
条件判断 if-else
C++ 的条件判断和 C 一样,但多了 if 带初始化(C++17)和更严格的布尔语义。
学完本章你将: 掌握 if/else if/else、带初始化 if、三目运算符。
基本语法
cpp
#include <iostream>
int main() {
int score = 85;
if (score >= 90) {
std::cout << "优秀\n";
} else if (score >= 80) {
std::cout << "良好\n"; // 输出这句
} else if (score >= 60) {
std::cout << "及格\n";
} else {
std::cout << "不及格\n";
}
return 0;
}
C++17 带初始化的 if
cpp
// C++17: if 语句内声明变量
if (auto it = map.find("key"); it != map.end()) {
// it 只在 if/else 块内可见
std::cout << "找到了:" << it->second << "\n";
} else {
std::cout << "没找到\n";
}
// it 在这里已不可用——避免污染外部作用域
三目运算符
cpp
int a = 10, b = 20;
int max = (a > b) ? a : b;
std::cout << max << "\n"; // 20
// C++ 中三目运算符可返回左值(C 不行)
(a > b ? a : b) = 100; // 修改 a 或 b
`=` 和 `==` 的经典陷阱
cpp
int x = 0;
// if (x = 5) { } // ❌ 赋值,总是真
if (x == 5) { } // ✅ 比较
// 防御技巧:常量放左边
// if (5 = x) { } // 编译错误,立刻暴露问题