什么时候使用c++;读文件、写文件、fprintf等上的iostreams。。。? 我发现使用C++中的流来代替Windows函数(如Read Frand、WrreFiell等)甚至FPrTNF都是非常容易的。什么时候使用流不好?什么时候使用流是好的?使用流是否安全?为什么很多程序员不使用流
这正是我一直想知道的,也许你能给我一些智慧什么时候使用c++;读文件、写文件、fprintf等上的iostreams。。。? 我发现使用C++中的流来代替Windows函数(如Read Frand、WrreFiell等)甚至FPrTNF都是非常容易的。什么时候使用流不好?什么时候使用流是好的?使用流是否安全?为什么很多程序员不使用流,c++,iostream,C++,Iostream,这正是我一直想知道的,也许你能给我一些智慧 当您希望应用程序可移植到不同平台时 当您需要更简洁的代码时:win32函数具有更精细的语义,通常需要一组函数来完成某些操作,并且肯定有更多的参数 溪流一般都很安全。在某些情况下,它们可能很慢和/或笨拙。慢,主要是因为它们在代码和操作系统之间强加了一些额外的层,在错误的情况下,这些层会增加开销。这种笨拙主要是与C的printf相比,而不是直接使用WriteFile之类的东西(它根本不直接支持格式化)。但是,例如,请考虑: printf("%2.2x",
溪流一般都很安全。在某些情况下,它们可能很慢和/或笨拙。慢,主要是因为它们在代码和操作系统之间强加了一些额外的层,在错误的情况下,这些层会增加开销。这种笨拙主要是与C的printf相比,而不是直接使用WriteFile之类的东西(它根本不直接支持格式化)。但是,例如,请考虑:
printf("%2.2x", ch);`
到
std::cout
什么时候使用流不好
- 不能保证流是线程安全的。很容易想象出一种情况,如果没有一些同步,就不能使用流
- 流对象通常相当“重”。对于内存不足或嵌入式环境,它们可能太重
什么时候使用流是好的
总的来说
使用流是否安全
是的,但是异步共享流时必须小心
为什么很多程序员不使用流
偏好、风格,或者他们首先学习了不同的方法(或不同的语言)。我发现很多旧的“c++”在线示例都是用c风格编写的,更喜欢printf而不是cout。我喜欢printf()的原因之一是格式字符串本身可以是资源,因此允许在不强制重新编译的情况下对程序输出进行更多的外部控制
我喜欢cout()的原因之一是它的原始速度
根据我的经验,这往往是一个相当宗教性的问题 不能对流执行异步文件i/o…一个原因是
您在这里提到了三个备选方案:
C++流(ostream、istream、fstream)
C stdio(printf,sprintf fprintf)
Windows文件(读文件、写文件)
选项1和2与平台无关。这意味着您可以为mac、linux或许多其他操作系统编译代码。选项3仅适用于Windows。这意味着您不能为Windows以外的任何对象编译它
在选择选项1和2时,取决于您希望如何使用它。关于语言,C库更易于使用。试图用流中的替代语言替换文本是一场噩梦,但是使流线程安全、将更复杂的类转换为可打印格式以及扩展流功能要容易得多
C++的iostream与C的stdio是一个非常激烈的争论,在本论坛的许多其他地方,例如
和其他在线的地方 对于那些通常不使用它的人来说,本文中的“i18n”意味着“国际化”。该单词中的“i”和“n”之间有18个字符,因此“i18n”。*printf仍然不能用于i18n,因为变量的位置和类型是硬编码的。@rpg:1)最多,这会减少但不会消除i18n的功能。2) 使用POSIX printf,位置也不是真正的硬编码。一句话:printf甚至还不够完美,但在这方面它仍然比iostreams好得多。boost::format库是另一种提供类型安全的printf格式的替代方案:频繁使用boost::format
可能会严重影响性能。在一个使用Boost 1.33的项目中,由于性能问题(用分析器测量),我不得不停止使用Boost::format。谢谢,很高兴知道这一点。我从未真正尝试过boost,但鉴于它如此受欢迎,我可能应该找个时间看看它。最完整的答案是,它提到了安全方面的东西。
std::cout << std::hex << std::setw(2) << std::setprecision(2) << std::setfill('0') << ch;
std::cout << setfill(' ');
string time = "4:32";
cout << "the current time is " << time;
cout << "वर्तमान समय " << time << " है।"
cout << time << "في الوقت الحالي هو";
string format = "the current time is %s";
string format = "वर्तमान समय %s है।";
string format = "%s في الوقت الحالي هو";
printf(format, time);