c++中关于cout与printf的简单区别

  1. 原理不同
  2. cout与printf格式不同
  3. 输出效率不同

原理

std::cout<<“输出内容"std::endl;
其中<<操作符提取"输出内容”,然后进行重载,同时重载函数,根据"输出内容"的类型来重载不同类型的函数。

重载,简单说,就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。
(在cout中,相当于有很多cout的同名函数,但它们有不同类型的参数:如int float char等,当"输出内容"为char类型时,调用参数为char的cout函数)

同时在定义每一个流对象时,系统会在内存中开辟一段缓冲区,用来暂存数据(系统内有多个缓冲区)。此时当收到endl时,cout行会进行换行,同时刷新缓冲区。
当缓冲区满或者收到结束符时,会将缓冲区数据一并清空并在显示设备输出。

格式

cout: std::cout<<"任意类型函数"std::endl;
printf: printf(“其他+%转换+其他”,参数);
c++中关于cout与printf的简单区别_第1张图片

输出效率实验传送门⬇️

“详细比较试验点击这里–来自另一个博主”

该博主结论:输出时尽量使用cout,输入时尽量使用scanf.

cin cout效率没scanf printf高
主要有以下几个原因:

1.流输入输出对于基本类型来说使用很方便,不用手写格式控制字符串。
2.对于标准库的一些class来说,显然重载操作符也比自己写格式控制字符串要方便很多。
3.对于复杂的格式可以进行自定义操作符。
4.可读性更好(这个很多人有不同意见,见仁见智了)。


其实原理上来说流操作的效率比printf/scanf函数族更高,因为是在编译期确定操作数类型和调用的输出函数,不用在运行期解析格式控制字符串带来额外开销。不过标准流对象cin/cout为了普适性,继承体系很复杂,所以在对象的构造等方面会影响效率,因此总体效率比较低。如果根据特定的场景进行优化,效率可以更高一点。

C++中cin,cout是不是效率不如scanf,printf

十分正确,如果你是做io比赛的或者是做acm的,尽量不要用cin,cout,你试试打印99999999就知道,它们之间速度大概相差10几倍

你可能感兴趣的:(c++)