2009-10-20 22 views
2

我想添加iostream到遗留代码,因此想要同步这两个库。根据article,我应该使用std :: ios_base :: sync_with_stdio。同步iostream与stdio

现在,我不知道它是如何在实践中使用(例如请),我应该知道的副作用。

THX

回答

7

默认情况下,数据流是同步的,它保证通过该标准的工作,你没有做任何事情。 sync_with_stdio只在这里禁用同步,如果你想。

你所提到的文章:

对于预定义的数据流,它的安全 混合标准输入输出和输入输出流。例如,对于 示例,您可以安全地在同一个程序中使用stdin和 cin; C++ 标准保证它会以你天真地期望它的方式工作 到 。

唯一的缺点是潜在的性能影响(我想这就是为什么它可以被禁用)。

+1

我记得做了一些基准测试,默认情况下'cout'比'printf'慢,直到'cout'变快时禁用'std :: ios_base :: sync_with_stdio'。不幸的是,我没有数字... – lvella 2012-05-23 03:35:18

+0

性能命中可以是10倍,根据banchmarks在这里: [为什么从标准输入读取行比C++慢得多比Python?](https://stackoverflow.com/questions/ 9371238 /为什么-是读取线从 - 标准输入-备受慢在-C超蟒?RQ = 1) – 2017-12-14 12:03:10

3

正如TheSamFrom1984所说,synced是默认值,所以它不应该是一个问题。但是,只有当两个库正在操作同一个流时,同步才有意义。这通常分别在使用cin/cout/cerr和stdin/stdout/stderr时发生。但是,除了重用遗留代码之外,我可以看到几个需要同时使用的原因。

当我第一次开始使用C++时,我发现自己这样做是因为我经常知道如何使用stdio做某些事情,但不知道如何使用iostream来做,但更好的方法是找出如何做在一个或另一个,但不是两个。