什么时候使用c ++ iostream优于ReadFile,WriteFile,fprintf等...?

Bri*_*nan 8 c++ iostream

我发现在c ++中使用流而不是像ReadFile,WriteFile等甚至fprintf这样的windows函数都非常容易.什么时候使用溪流不好?什么时候使用溪流好?使用流是否安全?为什么许多程序员不使用流?

这只是我一直想知道的事情,也许你可以放下一些智慧.

Jer*_*fin 11

流通常非常安全.在某些情况下,它们可能很慢和/或笨拙.缓慢,主要是因为它们在您的代码和操作系统之间施加了一些额外的层,并且在错误的情况下这些层会增加开销.笨拙主要是与C的printf相比,而不是直接使用像WriteFile这样的东西(根本不直接支持格式化).但是,请考虑:

printf("%2.2x", ch);` 
Run Code Online (Sandbox Code Playgroud)

std::cout << std::hex << std::setw(2) << std::setprecision(2) << std::setfill('0') << ch; 
std::cout << setfill(' ');
Run Code Online (Sandbox Code Playgroud)

然后考虑这样一个事实:如果你关心i18n,那么printf使用一个易于从外部源读入的字符串,其中C++流将所有格式嵌入到代码结构中,因此几乎任何格式更改都需要重写代码,重新编译和重新链接.

CreateFile, ReadFile等等,也允许内存映射文件和iostreams不支持的重叠读写等多种内容.如果这种情况让你充分利用这些,那么iostream往往不具备竞争力.

  • 为了那些通常不使用它的人的利益,这篇文章中的"i18n"意味着"国际化".在该单词的'i'和'n'之间有18个字符,因此是"i18n". (2认同)

luk*_*uke 10

什么时候使用溪流不好?

  • Streams不保证是线程安全的.很容易想到一个没有同步就无法使用流的情况.
  • 流对象通常非常"沉重".对于低内存或嵌入式环境,它们可能太重.

什么时候使用溪流好?

一般来说.

使用流是否安全?

是的,但是在异步共享流时你必须要小心.

为什么许多程序员不使用流?

首选,风格或他们首先学习不同的方法(或不同的语言).我发现很多旧的"c ++"在线例子都是用C语言编写的,更喜欢printf到cout.