很多初学者都会觉得反直觉我们明明是从键盘输入Input数据到程序里为什么叫提取Extraction我们明明是把数据输出Output到屏幕上为什么叫插入Insertion这两个词是站在“流Stream”的角度来命名的而不是站在“程序员”或“屏幕/键盘”的角度。在 C 的 iostream 库设计中cin和cout本质上都是“流”。1. 输入为什么叫“提取运算符” (Extraction Operator)视角站在“输入流 (cin)”的角度场景数据你敲的键盘字符源源不断地流入cin这条传送带。动作你的变量如int x或CinCount obj像一个接收器需要从这条流动的传送带上拿走Extract属于自己的那份数据。符号含义箭头的方向指向变量表示数据从流中流出进入变量。cin x; // 读作从 cin 流中 提取 (extract) 一个值放入 x。 // 英文官方名称Stream Extraction Operator形象比喻 想象cin是一条装满货物的河流。就像是一个渔网或水泵。你执行cin x就是从河里提取Extract出水数据装进你的桶变量x里。所以对于“流”来说数据被取走了。2. 输出为什么叫“插入运算符” (Insertion Operator)视角站在“输出流 (cout)”的角度场景cout是一条通向屏幕或文件的空传送带。动作你的数据变量里的值需要被塞进Insert这条传送带以便运送到终点屏幕。符号含义箭头的方向指向流表示数据被推入流中。cout x; // 读作将 x 的值 插入 (insert) 到 cout 流中。 // 英文官方名称Stream Insertion Operator形象比喻 想象cout是一条空的快递传送带通向客户屏幕。就像是一个机械臂。你执行cout x就是把货物变量x的值插入Insert到传送带上。一旦插入传送带就会把它运走显示出来。所以对于“流”来说数据被放进去了。总结箭头方向决定名字C 的设计者 Bjarne Stroustrup 非常巧妙地利用了位运算符的方向性来隐喻数据的流向cin x箭头指向x数据去x那里 - 从cin提取。cout x箭头指向cout数据去cout那里 - 向cout插入。为什么这个设计很天才直观箭头指向哪里数据就去哪里。不用死记硬背“输入用哪个输出用哪个”看箭头就行。链式调用自然cout A B C; // 像流水线一样把 A 插进去再把 B 插进去再把 C 插进去。 cin a b c; // 像流水线一样从里面提取给 a再提取给 b再提取给 c。