C++中cout和write的区别

8

我仍然对C++中的ostream& write ( const char* s , streamsize n ) 和cout之间的区别感到困惑。

第一个函数将指向s的数据块写入输出缓冲区,大小为n个字符。字符按顺序写入,直到写入n个为止。

而cout是一个表示标准输出流的ostream类对象。它对应于cstdio流stdout。

有人能清楚地说明这两个函数之间的区别吗?


而cout是一个类ostream的对象,代表标准输出流。正如你所说,第二个是一个类而不是函数。 - Nobody moving away from SE
3
你正在进行一个苹果与橙子(即函数与类实例)的比较。你是不是想把writeostream::operator <<进行比较? - stakx - no longer contributing
7个回答

18
ostream& write ( const char* s , streamsize n );

一个未格式化输出函数所输出的内容不一定是,因此,数组中的任何空字符都会被复制到目标位置,并且不会终止写入过程。

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


8
你想知道一个类成员函数和该类的实例有什么区别?其中,cout是ostream并且具有write()方法。
至于cout << "Some string" 和 cout.write("Some string", 11)之间的区别:它们的作用相同。<<可能会稍微慢一点,因为write()可以在事先知道字符串长度的情况下进行优化。另一方面,<<看起来不错,可以与许多类型一起使用,例如数字。你可以写cout << 5;但不能写cout.write(5)。

2

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

cout.write(source,size);

1

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

.write()函数被称为原始(或未格式化)输出。它简单地将一系列字节输出到流中。

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

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

许多不同的类型都有 ostream& operator<<(ostream& stream, const UserDefinedType& data),可以重载它来丰富 ofstream 的词汇量。

1
在二进制文件中,使用提取和插入运算符(<<和>>)以及像getline这样的函数来输入和输出数据并不高效,因为我们不需要格式化任何数据,并且数据可能不使用文本文件用于分隔元素的分隔代码(如空格、换行符等)。
文件流包括两个专门设计用于按顺序输入和输出二进制数据的成员函数:write和read。第一个函数(write)是ostream的成员函数,由ofstream继承而来。而read是istream的成员函数,由ifstream继承而来。类fstream的对象都有这两个成员函数。它们的原型是:
write(memory_block, size); read(memory_block, size);
来源:http://www.cplusplus.com/doc/tutorial/files/

1

哦,伙计!有机会解决一个问题。

从您的问题中我感觉您是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允许这样做,效果非常好。class std :: ostream 实现了流运算符,但也实现了一个常规的写入函数,用于执行原始二进制操作。

0

我同意 Alok Save 的观点!之前我搜索了这个问题并仔细阅读了答案。

换句话说,coutostream 的一个对象,而 write 只是提供的一个函数。因此,程序员可以通过两种方式使用 cout:一种是作为成员函数,另一种是通过 operator(<<) 使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接