C scanf关闭cin同步的坏处
Disadvantages of turning off cin synchronization with C scanf
我最近从this question那里学到了一些关于C++中cin
的东西,它的速度与C中scanf
的速度进行了比较。调用cin
对象要慢得多而不是像往常一样调用 scanf
函数但是当我阅读接受的答案时,我明白如果我们调用 std::ios::sync_with_stdio(false);
,cin
与 scanf
的同步将关闭并且 cin
在这种情况下,速度变得如此之快,甚至比scanf
还要快。
那么,如果关闭它,我们会遇到一些问题吗?如果是这样,有什么问题,在 C 中关闭 cin
与 scanf
同步是否好?感谢您的帮助。
如果您在同一个流(例如 stdin
stream 与 scanf
和 cin
) 相关联,那么你最好让它们保持同步。
如果任何一个流仅使用一个 I/O 系列,您可以关闭同步(您仍然可以将 fscanf
用于特定文件,将 cin
用于 stdin
例如,只要涉及单独的流)。
基本上同时使用CAPI就会出现问题。可能会出现许多奇怪的工件:丢失数据、错误顺序、意外错误。
您可以完全控制整个代码堆栈,并且可以确保不使用 C API。
遗憾的是,您的应用程序通常使用第三方库。其中之一可以使用 C API 将一些数据输出到流中(特别是如果其中之一是 C 库)。由于您不控制第三方库行为,因此需要同步。
我最近从this question那里学到了一些关于C++中cin
的东西,它的速度与C中scanf
的速度进行了比较。调用cin
对象要慢得多而不是像往常一样调用 scanf
函数但是当我阅读接受的答案时,我明白如果我们调用 std::ios::sync_with_stdio(false);
,cin
与 scanf
的同步将关闭并且 cin
在这种情况下,速度变得如此之快,甚至比scanf
还要快。
那么,如果关闭它,我们会遇到一些问题吗?如果是这样,有什么问题,在 C 中关闭 cin
与 scanf
同步是否好?感谢您的帮助。
如果您在同一个流(例如 stdin
stream 与 scanf
和 cin
) 相关联,那么你最好让它们保持同步。
如果任何一个流仅使用一个 I/O 系列,您可以关闭同步(您仍然可以将 fscanf
用于特定文件,将 cin
用于 stdin
例如,只要涉及单独的流)。
基本上同时使用CAPI就会出现问题。可能会出现许多奇怪的工件:丢失数据、错误顺序、意外错误。
您可以完全控制整个代码堆栈,并且可以确保不使用 C API。
遗憾的是,您的应用程序通常使用第三方库。其中之一可以使用 C API 将一些数据输出到流中(特别是如果其中之一是 C 库)。由于您不控制第三方库行为,因此需要同步。