C++中流的优点是什么

What are the advantages of streams in C++?

本文关键字:是什么 C++      更新时间:2023-10-16

我主要使用C++中的Qt框架。有人能解释一下使用文本流对象而不是直接使用对象的优点吗?

下面是一个没有QTextStream的示例代码;

QFile file("asd.txt");
// assuming that file exists
file.open(QIODevice::Append);
file.write("asd");
file.close();

使用下面的代码代替上面的代码有什么优点(或缺点);

QFile file("asd.txt");
// assuming that file exists
file.open(QIODevice::Append);
QTextStream tStream(file);
file << "asd";
file.close();

提前谢谢。

QFile::write要么写一个以nul结尾的C字符串,要么写你给它的二进制数据。

QTextStream则进行文本格式化/转换。

  • 它只处理文本输出/输入,而不处理任意二进制数据
  • 您可以给它一个基元类型(int、float、long等),它会将其转换为文本表示
  • 您可以让它读取文本并转换为基元类型
  • 你可以让它进行格式化输出,例如pad或左/右调整文本
  • 您可以设置文本编码(例如UTF-8、UTF-16)
  • 它缓冲数据,可能会减少系统调用。请注意,这意味着您的代码应该在关闭文件之前调用tStream.flush();

要补充现有答案,请注意流是类型安全的。特别是,您不存在scanf和指针的问题。

但即使是C++大师Herb Sutter在某些用途上也更喜欢snprintf风格的语法——我同意。记住printf样式的格式化语法有时比iostream格式化标志更容易。

此外,请注意,在同一程序中使用实际的printf和cout可能会因同步libc-printf和stdlibc++cout使用的内部对象而导致严重的性能损失。至少,过去是这样。