C++中流的优点是什么?

What are the advantages of streams in C++?

我主要使用 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 执行文本 formatting/conversion。

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

为了补充现有答案,请注意流是类型安全的。特别是你没有scanf和pointers的问题。

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

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