C++中流的概念要咋去理解和应用呢

语法糖而已,不要那么在意。简单来说,就是一个返回句柄自己的对象方法+函数重载。要输入输出,就要有个句柄,描述你要输入输出的那个地方。比如C,就是用FILEFILE* handle = fopen(......);fprintf(handle, "template", arguments......);/* 或者使用预先给你开好的标准输入、标准输出、标准错误 */fprintf(stderr, "template", arguments......);对于C++,砖家们认为一次只输出一个参数是好的,所以就搞成了类似这样:class stream{public: stream\u0026amp; write(int value); stream\u0026amp; write(float value); stream\u0026amp; write(const std::string\u0026amp; value);};于是你就可以这么用:stream handle;handle.write("Foo: ").write(123).write(", Bar: ").write(456.789);然后C++的砖家们认为重载\u0026lt;\u0026lt;操作符是好的,所以就搞成了类似这样:class stream{public: stream\u0026amp; operator\u0026lt;\u0026lt;(int value); stream\u0026amp; operator\u0026lt;\u0026lt;(float value); stream\u0026amp; operator\u0026lt;\u0026lt;(const std::string\u0026amp; value);};就有了你现在看到的这玩意:stream handle;handle \u0026lt;\u0026lt; "Foo: " \u0026lt;\u0026lt; 123 \u0026lt;\u0026lt; ", Bar: " \u0026lt;\u0026lt; 456.789;实际上,这种机制有诸多问题。比如它有更多的函数调用;输出格式被一堆符号分成零散的,看起来更不直观,等等。
■网友
如果要精简c++,流是最想去除的功能之一
■网友
流是啥?“流”就是一种对象嗷。你先要理解面向对象,C++将对计算机的各种操作都可以理解成“对象”。你可能对面向对象的编程还不太理解,我们这里也解释一下。
(这个“对象”翻译成object-物体比较好。鬼知道C++ 专有名词是怎么翻译的“继承”“重写”“重载”)
对象呢,就是程序设计中理解的一个物体。比如你常见的例子:学生有一个属性“身高”可以进行“上学”:
class 学生{int 身高;void 上学();};对应到计算机的流,就是这样的:
class 输出流{数据发送器 output;void 写入一个数据(int 数据);void 写入一个数据(double 数据);void 写入一个数据(char* 数据);};这样,你执行 写入一个数据(31),31 就会被进行特定的转换,发往 output(output是一个类的实例,通常在实际应用中是这样的:class basic_ostream: virtual public basic_ios\u0026lt;_Elem, Traits\u0026gt;)
如果这个output是一个将数据发往终端的 (数据发送器)。 你用的流就应该是cout。那么他的功能就和printf基本相同。
C++中流的概念要咋去理解和应用呢

终端就是这个黑框框其实在\u0026lt;iostream\u0026gt;头文件里面就有一个这样的定义:(实际上定义的继承关系非常复杂,这里简化到不行了已经)
class ostream:输出流{//知道 冒号 表示继承吗?数据发送器 output = new 发往终端的发送器;}ostream cout;也就是说cout是一个类流的实例。
再说清楚一点 ostream是一个类型 cout 是一个 ostream 的实例。
这么和printf有什么区别呢?有好处也有坏处哦!最大的亮点,就是,我们可以将输出进入流的程序,和流输出数据的程序分开,


推荐阅读