C ++中的流有什么优势?

时间:2015-12-10 11:32:25

标签: c++ qt filestream

我主要在C ++中使用Qt框架。任何人都可以向我解释使用textstream对象而不是直接使用对象的优势吗?

以下是没有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();

提前致谢。

2 个答案:

答案 0 :(得分:6)

QFile::write或者写一个nul终止的C字符串,或者你给它的二进制数据。

另一方面,

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

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

答案 1 :(得分:0)

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

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

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