📄 一句话概括
条件运算符 ? : 是第三章认识的三目,本章把它放回本行——它其实就是"挑值版"的 if-else:条件真取冒号前的值,假取冒号后的值。三行 if-else 能缩成一行,但只适用于"两个值里挑一个"的场景。
一、语法:条件和两个候选值
条件 ? 值甲 : 值乙 // 真取甲、假取乙,整体是一个"值"
和 if-else 的本质区别(对着图看):
- if-else 是"语句"——管的是"执行哪段代码",块里放的是动作
- 三目是"表达式"——管的是"算出哪个值",
? :两边放的是值(变量、字面量、表达式都行),整个式子本身有值有类型,能塞进cout、能赋给变量、能当函数参数
铁律:整体套括号。 3.2 讲过 << 优先级高于 ? :,cout << n % 2 == 0 ? "偶数" : "奇数"; 会被拆成 (cout << n % 2 == 0) ? ...——cout 和 0 比较直接编不过。写 cout << (条件 ? 甲 : 乙); 才对。
二、实例 04:用条件运算符判断数的奇偶性
#include <iostream>
using namespace std;
int main() {
int n;
cout << "请输入一个整数:";
cin >> n;
cout << n << (n % 2 == 0 ? " 是偶数" : " 是奇数") << endl;
return 0;
}
看到什么算成功:输入 10 输出"10 是偶数";输入 -7 输出"-7 是奇数"(-7 % 2 是 -1,非 0,条件假——4.2.1 的负数坑这里天然免疫)。
对照:同样的事 if-else 要写四行(见配图左栏)。三目把"判断"和"取值"压进一行,特别适合给变量赋默认值、挑字符串、挑较大数这类轻活:
int bigger = (a > b) ? a : b; // 挑大数
string level = (score >= 60) ? "及格" : "挂了"; // 挑文案
三、30 秒实验:三目塞不塞得进 cout
把实例里三目外的括号删掉再编译:
看到什么算成功:报错(error 提示 cout 不能与 int 比较)——<< 抢先把式子拆散了。括号加回去,一切正常。这就是"整体套括号"不是风格而是语法需要的证据。
四、常见误区
- "三目能替代所有 if-else"——不能。三目两边只能放值,放
cout << ...这类语句直接编不过(有的编译器放宽但结果是错的)。要"执行动作"老实用 if-else。 - "三目嵌套三目很高级"——能写(
a > b ? a : c > d ? c : d)但可读性崩盘,0.5 秒看不懂的代码都是坏代码。嵌套超过一层改回 if-else。 - "忘了三目整体是值"——
n % 2 == 0 ? "偶数" : "奇数";单独写一行,算出的值没人接,等于白算(3.3.1 的a+b;同款陷阱)。
自测三问(点开对答案)
1. `a > b ? a : b` 算出什么?——a、b 中较大的那个数(整个式子是值)。 2. 三目两边能放语句吗?——不能,只能放值;执行动作用 if-else。 3. 为什么三目进 cout 必须套括号?——`<<` 优先级高于 `? :`,不套会被拆散(3.2)。- ☐ 4.4 switch语句(下一节)
相关笔记
- 条件运算符 —— 三目的出厂介绍
- 第二种形式的判断语句 —— 三目的语句版对照组
- 🔷 C++基础 · 索引 —— 全课路线图