【问题标题】:Whats the difference between ofstream "<<" and Writeofstream“<<”和Write有什么区别
【发布时间】:2010-12-01 22:32:35
【问题描述】:

我以二进制模式打开了一个文件,并想写入一个文件。

   ofstream ofile("file.txt",ios_base::binary)
    int a = 1;
    float f = 0.1;
    string str = 10;
    ofile<<a<<f<<str;

想知道使用 "

【问题讨论】:

  • 这完全是猜测,但我敢打赌 operator&lt;&lt; 是使用 write() 实现的

标签: c++ visual-c++ file


【解决方案1】:

operator

但是,如果您正在编写非 pod 类型,则需要小心。你不能只说:

write( &mystring, sizeof(std::string) );

你需要有一些方法来输出实际数据,这些数据不存储在类或结构本身中。

【讨论】:

  • 我怀疑应该是write(&amp;mystring, mystring.size())
  • @Dilawar:不,这更错误。字符数据不存储在字符串对象本身中。它是单独动态分配的,并由指针引用。您可以使用mystring.c_str(),但如果您希望能够正确检索它,还需要以某种方式存储大小本身。
  • wrtie(&amp;mystring, mystring.length()) 更好吗? write("s\n", 2) 也可以吗?如果是,那么它是否比ofile &lt;&lt; "s\n" 快?
  • @platinoob_:不,length()size() 做同样的事情。 write("s\n", 2) 很好,它可能比ofile &lt;&lt; "s\n" 更快,因为它不必计算字符串的长度。不过,我怀疑您是否能够衡量差异。
【解决方案2】:

AFAIK write 传递值“原样”,操作员

如需了解更多信息,请参阅 here 它的要点列出了一些功能。

如前所述,对于二进制数据,通常最好使用 write,因为它只输出没有 任何 格式的数据(这对于二进制数据非常重要,因为额外的格式可能会使格式无效)

【讨论】:

    猜你喜欢
    • 2021-04-25
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    • 2013-11-14
    • 2018-12-13
    • 2013-08-08
    • 2012-02-04
    • 2011-08-22
    相关资源
    最近更新 更多