执行 C++ 代码 cout << '9' + '1'; 的输出为 $10$。( )
答案B。文件重定向后cout的输出被写入文件。程序本身无法确定输出目的地。
文件重定向后程序行为不变,只是I/O目的地改变了。程序无法区分。
【考点】字符字面值与 ASCII 码转换|C++ 运算符优先级
1. 考纲定位 本题考查 GESP 二级 C++ 大纲中"字符与字符串"模块的核心概念。命题人专门设计这道题,就是要卡住考生对字符字面值本质的理解——绝大多数人看到 '9' 就下意识当成数字 9 处理,完全忽略了 C++ 里字符字面值本身就是整型。
2. 解题思维 看到字符字面值参与运算,第一反应必须是查 ASCII 码(或编码表):'9' 的码值是 57,'1' 的码值是 49。加法运算直接作用于这两个整型值:57 + 49 = 106。题目声称输出是 10,显然错误。
3. 陷阱拆解 选项 A 的正确者都是在掉同一个坑:"字符字面值 '9' 就是数字 9 的字符形式"这句话是错的。'9' 存储的是编码 57,不是数字 9 的某种可视化包装。命题人最阴险的细节在于使用单引号——双引号 "9" 才是字符串字面值(类型是 const char*),而单引号 '9' 是字符字面值(int 类型)。如果你只背"字符加法等于数字加法"这种结论,不看类型和编码表,一定会选 A。
4. 反命题思维 如果把题干改成 cout << '9' + '1' - '8';,答案就是 10 了(57+49-56=50,再转字符显示为 '2')。刷到字符字面值运算的题,先别急着算,问自己三个问题:类型是什么?编码是多少?运算后是什么类型?