C++中ostream &sout=name.empty()?cout:ofstream(name)代码用法求教
C++ 动态输出流代码讲解
整体功能
这段代码的设计目的是实现输出目标的动态选择:用户输入文件名就输出到对应文件,用户没输入内容就直接输出到控制台,后续写输出逻辑时不需要重复判断输出目标,直接用统一的流对象操作即可。
核心行ostream &sout=name.empty() ? cout : ofstream(name);原理拆解
我们逐部分拆分理解:
- 首先要明确两个基础前提:
- C++标准库中,
ostream是所有输出流的公共基类,控制台输出对象cout是ostream的实例,文件输出类ofstream是ostream的子类,二者都支持<<运算符输出内容的通用用法 - 三元运算符
条件 ? 表达式1 : 表达式2的逻辑是:条件成立时返回表达式1的结果,条件不成立时返回表达式2的结果
- C++标准库中,
- 条件部分
name.empty():判断用户输入的字符串是否为空(也就是用户有没有输入合法的文件名) - 条件成立分支
cout:如果用户没输入内容,就返回控制台输出流对象 - 条件不成立分支
ofstream(name):如果用户输入了文件名,就创建一个对应名称的文件输出流对象 - 左侧
ostream &sout:声明一个输出流基类的引用,绑定到三元运算符返回的流对象上。后续你不管是要输出到控制台还是文件,只需要写sout << "要输出的内容"就可以自动适配目标,不需要每次都判断该用cout还是单独写文件流逻辑,能简化后续代码。
注意:你当前贴的代码只完成了流对象的绑定,补充下面的代码就可以直观看到效果:
sout << "测试内容,输入了文件名就写进文件,没输入就打印在控制台" << endl;
内容的提问来源于stack exchange,提问作者tucooperacion
相关产品推荐
相关产品推荐

