文件写入,插入运算符和写入函数的区别?
Posted
技术标签:
【中文标题】文件写入,插入运算符和写入函数的区别?【英文标题】:File writing, difference in insertion operator and write function? 【发布时间】:2014-07-02 11:26:11 【问题描述】:我想知道插入运算符(和函数write()有什么区别,因为下面给出的行代码
outFile << "Hello world";
还有
outFile.write("Hello world");
当我试图在文本文件中写入字符串“Hello world”时,这两个都达到了我想要的结果。那么这两者有什么区别呢? 以及为什么插入操作符可以写入文件时还需要write()函数?
【问题讨论】:
【参考方案1】:那么这两者有什么区别呢?
主要区别在于第二个不会编译。 write
有两个参数,用于写入一个已知大小的字符序列:
outFile.write("Hello world", 11);
当您已经有一个包含要输出的字符序列的数组时,请使用此无格式输出。
格式化输出的插入运算符用于格式化许多不同的类型(包括以零结尾的字符串,如您的示例所示)。例如:
outFile << "Hello world"; // outputs the string (no need to specify the size)
outFile << 42; // outputs "42", formatting the integer as text
【讨论】:
:v 很好,当然它不会编译。但是我仍然无法理解插入运算符?请多解释。 @shujat7:<<
将接受任何输入:string、int、char*、whathaveyou,将其转换为字符串然后写入。 (当然,如果类型不能隐式转换,就会失败)。
@shujat7:我添加了几个使用<<
的示例。当您希望流弄清楚如何格式化您输出的任何类型时使用它(数字类型、指针、std::string
、像您的示例一样的 C 样式字符串,以及任何其他具有适当重载 <<
的类型)。
【参考方案2】:
write()
是未格式化的输出,只需要 const char *
和 int。它也不会在失败时设置失败位。如需更多信息,请查看here。运算符<<
具有格式化和未格式化的重载。
【讨论】:
以上是关于文件写入,插入运算符和写入函数的区别?的主要内容,如果未能解决你的问题,请参考以下文章
使用 IOUtils 和 ImageIO 写入图像文件有啥区别