【问题标题】:difference between cout and write in c++c++ 中 cout 和 write 的区别
【发布时间】:2026-01-29 00:15:01
【问题描述】:

我仍然对 c++ 中的 ostream& write ( const char* s , streamsize n ) 和 c++ 中的 cout 之间的区别感到困惑 第一个函数将 s 指向的数据块(大小为 n 个字符)写入输出缓冲区。字符被顺序写入,直到 n 被写入。 而 cout 是 ostream 类的对象,表示标准输出流。它对应于 cstdio 流标准输出。 谁能清楚地指出这两个功能之间的区别。

【问题讨论】:

  • whereas cout is an object of class ostream that represents the standard output stream。正如你所说,第二个是一个类,没有函数。
  • 您实际上是在将苹果与橙子进行比较(即,将函数与类实例进行比较)。您的意思是将writeostream::operator << 进行比较?

标签: c++


【解决方案1】:
ostream& write ( const char* s , streamsize n );

是一个未格式化的输出函数,写入的不一定是c-string,因此在数组s中找到的任何空字符都会被复制到目的地并且不会结束写入过程。

cout 是一个ostream 类的对象,代表标准输出流。
它可以使用插入运算符ostream::operator<< 将字符写入格式化数据,也可以使用write 成员函数写入未格式化数据

【讨论】:

    【解决方案2】:

    你在问类成员函数类的实例有什么区别? cout ostream 并且 write() 方法。

    关于cout << "Some string"cout.write("Some string", 11)之间的区别:它是一样的,<<可能会慢一点,因为write()可以优化,因为它预先知道字符串的长度。另一方面,<< 看起来不错,可以用于多种类型,例如数字。你可以写cout << 5;,但不能写cout.write(5)

    【讨论】:

      【解决方案3】:

      cout 不是函数。就像你说的,它是 ostream 类的对象。而作为该类的一个对象,它拥有write函数,可以这样调用:

      cout.write(source,size);
      

      【讨论】:

        【解决方案4】:

        “在二进制文件中,使用提取和插入运算符(>)和getline之类的函数来输入和输出数据效率不高,因为我们不需要格式化任何数据,并且数据可能不会使用文本文件用来分隔元素的分隔代码(如空格、换行符等)。

        文件流包括两个专门设计用于顺序输入和输出二进制数据的成员函数:写入和读取。第一个(write)是ofstream继承的ostream的成员函数。而read是ifstream继承的istream的成员函数。 fstream 类的对象有两个成员。他们的原型是:

        写(内存块,大小); 读取(内存块,大小); "

        来自:http://www.cplusplus.com/doc/tutorial/files/

        【讨论】:

          【解决方案5】:

          没有函数ostream& write ( const char* s , streamsize n )。也许你指的是成员函数ostream& ostream::write ( const char* s , streamsize n )

          .write() 函数称为原始(或无格式)输出。它只是将一系列字节输出到流中。

          全局变量coutofstream 类的一个实例,具有.write() 方法。但是,cout 通常用于格式化输出,例如:

          string username = "Poulami";
          cout << "Username: '" << username << "'." << endl;
          

          许多不同的类型都有ostream&amp; operator&lt;&lt;(ostream&amp; stream, const UserDefinedType&amp; data),可以对其进行重载以丰富ofstream 的词汇量。

          【讨论】:

            【解决方案6】:

            天啊!一个解决问题的机会。

            根据您的问题,我觉得您是一些 Java 或 Python 程序员,绝对不是初学者。

            您不了解 C++ 可能是唯一允许程序员将基本内置运算符作为类成员和通用接口的一部分来实现的语言。

            在 Java 中你永远不会去

             class Money
             {
              int operator + (int cash) { return this.cash + cash; }
              void operator << () { System.out.println(cash); }
              int cash;
              }
            
              public class Main_
              {
               public static void Main(String [] args) 
               {
                Money cashOnHand;
                System << cashOnHand;
                }
                }
            

            但是 cpp 允许这样做,效果很好。 std::ostream 类实现了流运算符,但也实现了一个常规的写入函数,该函数执行原始二进制操作。

            【讨论】:

              【解决方案7】:

              我同意Alok Save!之前,我搜索了问题并仔细阅读了答案。

              或许换句话说,coutostream的一个对象,而write只是提供的一个函数。所以 cout 有两种方式供程序员使用:一种是作为成员函数,另一种是由 operator(

              【讨论】: