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
则进行文本格式化/转换。
- 它只处理文本输出/输入,而不处理任意二进制数据
- 您可以给它一个基元类型(int、float、long等),它会将其转换为文本表示
- 您可以让它读取文本并转换为基元类型
- 你可以让它进行格式化输出,例如pad或左/右调整文本
- 您可以设置文本编码(例如UTF-8、UTF-16)
- 它缓冲数据,可能会减少系统调用。请注意,这意味着您的代码应该在关闭文件之前调用
tStream.flush();
要补充现有答案,请注意流是类型安全的。特别是,您不存在scanf和指针的问题。
但即使是C++大师Herb Sutter在某些用途上也更喜欢snprintf风格的语法——我同意。记住printf样式的格式化语法有时比iostream格式化标志更容易。
此外,请注意,在同一程序中使用实际的printf和cout可能会因同步libc-printf和stdlibc++cout使用的内部对象而导致严重的性能损失。至少,过去是这样。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- C++避免重复声明的语法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- C++中名称篡改的目的是什么
- 在 c++ 中拥有一组结构的正确方法是什么?
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- 派生类销毁的最佳实践是什么
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 通过JNI传递数据数组的最快方法是什么
- "using namespace std;"在C++的作用是什么?
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 文件系统:复制功能的速度秘诀是什么
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 是什么原因导致它无法编译?它是声明签名还是在函数本身的实现中
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么