sync_with_stdio()的一个特性

水一篇随笔

其实对于用快读的大佬来说没什么用,但还是提一下

ios::sync_with_stdio(false)用处是“关闭同步”,从而加快cin与cout的效率。

在部分机子上如果开了这个函数cin和cout跑的还比printf和scanf快。

但是用了sync_with_stdio(false)之后不能与printf和scanf同用,否则会出错。

最近调试的时候发现的:

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cout<<"1\n";
printf("2\n");
cout<<"3\n";
printf("4\n");
}

运行结果是:

2
4
1
3

可以发现开了ios::sync_with_stdio(false)之后,printf函数被提前了,而且这与它在代码中具体出现的位置无关。

至于为什么,据说是C++为了兼容C语言,保证程序在使用std::printfstd::cout的时候不发生混乱(不发生上述情况),将输出流绑到了一起,也就是用了sync_with_stdio()函数:





如果不绑到一起(也就是开个ios::sync_with_stdio(false)),会造成指针读取的混乱,因此输出顺序混乱。

不过在测试的时候我并没有发现cin与scanf的不兼容(出于安全,还是别一起用)。

最新文章

  1. CSS补充与JavaScript基础
  2. Ubuntu为何永远绝对的免费?
  3. javascript中获取屏幕尺寸
  4. String[] a = new String[]{&quot;1&quot;,&quot;2&quot;},我如果想增加一个&quot;3&quot;到a中,如何增加?
  5. 利用在线工具自动化生成findviewById
  6. iOS学习之Object-C语言内存管理高级
  7. [Ruby on Rails系列]4、专题:Rails应用的国际化[i18n]
  8. Backward_chaining
  9. IOS 学习笔记(3) 视图UITabbarController
  10. Linux多线程服务端编程:使用muduo C++网络库
  11. iphone开发中数据持久化之——模型对象归档(二)
  12. promise(3) &#39;静态&#39;方法
  13. leetcode算法:Distribute Candies
  14. LinuxTimeLine
  15. kettle实现同构单表增量同步
  16. 自己实现字符串转整数(不使用JDK的字符串转整数的方法)
  17. saliency map [转]
  18. pthread线程私有数据
  19. Okra框架(三) 搭建HTTP服务器
  20. [BZOJ5338][TJOI2018]xor

热门文章

  1. 初识 Istio - 服务网格管理工具
  2. Nuget管理自己的项目库
  3. 《C++primerplus》第7章练习题
  4. tu
  5. JVM系列【3】Class文件加载过程
  6. [HAOI 2017]八纵八横
  7. python中remove函数的坑
  8. mac电脑上安装appium报错:Failed at the appium-chromedriver@4.25.1 postinstall script.
  9. IDEA SpringBoot+JPA+MySql+Redis+RabbitMQ 秒杀系统
  10. hdu6376 度度熊剪纸条-----01背包