C++中关于关闭输入输出流及其注意事项(基础)
//关闭C++和C的输入输出流的同步,提高C++的输入输出效率
std::ios::sync_with_stdio(false);
//解除cin和cout的绑定,让它们可以独立缓冲
std::cin.tie(0);
std::cout.tie(0);//这一句可以不要,效果一样
这三行代码让C++的输入输出流不再和C的标准输入输出流进行协调。这样做的好处是可以提高C++的输入输出速度(常用于ACM卡时间),但是缺点是不能再混用C++和C的输入输出函数,比如cin和scanf,cout和printf、puts。
三行代码所放位置
一般来说,放在main函数的开头比较好,这样可以保证整个程序都使用这样的设置。如果放在其他位置,可能会导致一些不必要的麻烦,比如:
- 如果放在某个函数中,那么只有在调用这个函数之后才会生效,而在调用之前还是使用默认的设置,这样可能会造成输入输出的不一致或者错误。
- 如果放在某个循环中,那么每次循环都会执行这三行代码,这样会浪费时间和资源,而且没有必要,因为一次设置就可以一直有效。
- 如果放在某个条件分支中,那么只有满足条件时才会执行这三行代码,而不满足条件时还是使用默认的设置,这样也可能会造成输入输出的不一致或者错误。
因此,建议把这三行代码放在main函数的开头,或者其他你确定只会执行一次且在所有输入输出操作之前的位置。
注意:
这三句代码不能放在main函数外面。这是因为:
- 这三句代码都是对cin和cout对象的操作,而cin和cout对象是在main函数开始之前就已经被初始化的,所以如果要修改它们的属性或者状态,必须在main函数内部进行。
- 这三句代码都是对输入输出流的设置,而输入输出流的设置应该在程序开始执行之前就确定好,以保证程序的一致性和正确性。如果放在main函数外面,可能会导致程序的逻辑混乱或者错误。
- 这三句代码都是局部的作用域,只能影响它们所在的函数或者代码块。如果放在main函数外面,那么它们就会失去作用,因为它们不属于任何一个函数或者代码块。
关于换行
在已经使用cout输出的情况下,就不能使用ptintf("\n");或puts("");
如果想要速度更快,建议使用cout<<"\n";来取代cout<<endl;。