GESP 四级 · GESP 202606 C++ 四级 第 23 题

判断题 · 答案 A

← 整套速查表 GESP 四级 全部真题

题目

假设文件 output.txt 能正常打开,下面代码通过 rdbuf 将 cout 的输出重定向到了文件中。

ofstream fout("output.txt");
streambuf* old_buf = cout.rdbuf();
cout.rdbuf(fout.rdbuf());
cout << "GESP Exam";
cout.rdbuf(old_buf);
答案:A

解题思维

答案A。根据计算机/编程基础知识分析判断。

常见错误

仔细审题,注意题目中的所有限定词和条件。不确定时用排除法缩小选项范围。

详细解析(节选)

【考点】流式输出重定向|流缓冲器操作|文件输出流

关键观察是 rdbuf 返回的是流内部的缓冲对象指针。保存旧缓冲后,将 cout 的缓冲替换为 fout 的缓冲,后续输出自然写入文件。恢复时再换回旧缓冲即可。此类题通法:用 rdbuf 交换缓冲指针,先存后换,输出后恢复,操作顺序必须严格匹配。

错误选项常利用“缓冲未恢复”或“输出仍去控制台”的错觉。本题陷阱在于绝对化表述——若认为“重定向后 console 仍有输出”或"rdbuf 操作无效”,就掉进概念偷换。记住:rdbuf 本质是缓冲指针交换,只要保存旧指针并正确恢复,输出流向就完全可控。

若把 fout 改为未打开的流,rdbuf 会访问空指针,程序崩溃;若省略恢复步骤,控制台将永久静默。刷到这类题先问:“命题人想考我流缓冲的交换逻辑,还是缓冲指针的保存机制?”

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断