发新话题
打印

cout和printf有什么区别?

cout和printf有什么区别?

有时候用cout显示输出的时候显示不出来,等到执行完下一个语句之后才会显示.
很是烦恼,iostream.h又没耐心看,小弟不才,这种基本的东西都搞不懂,还忘各位仁兄赐教.
楼上的来骗LUPA币的吧
简单的说,cout 是对象,printf 是函数。printf 是 C 的东西了,cout 为 C++ 特有。
cout 是 ostream 的对象,而 ostream 又是这样定义的:
    typedef basic_ostream<char, char_traits<char> > ostream
即,cout 是 class basic_ostream 的以 char 特例化后的对象。

Class basic_ostream 一般还可以以宽字符 wchar_t  特例化,如下:
    typedef basic_ostream<wchar_t, char_traits<wchar_t> > wostream;
所以 cout 其实还有一个宽字符版:wcout。

只能写这么多。抱歉。
cout的输出方法并不是系统调用,因此输出先到缓冲,然后再适时地输出
那什么时候才会适时呢,一般如果输出\n或者endl就会自动自动flush(清空缓冲)
如果没有换行,自己手动输出即可,如
cout<<a<<flush;

我也是初学者,欢迎指正
有两点值得做进一步说明: (当然这里仅就 Linux 而论)

1. 关于系统调用
引 Robert Love, Linux Kernel Development, 2nd Edition, chapter 5:
Typically, applications are programmed against an Application Programming Interface (API), not directly to system calls. This is important, because no direct correlation is needed between the interfaces that application make use of and the actual interface provided by the kernel.
比如你在你的程序里调用 printf() , 那么你的程序, C 程序库, 及内核之间的关系如下:
你的程序调用 C 程序库提供的 printf() -> C 程序库的 printf() 调用 C 程序库的 write() -> C 程序库的 write() 调用内核提供的系统调用 write() (sys_write())
此外, cout 在其实现的最终, 肯定是会调用系统调用的, 因为它要把东西输出到 stdout, 必须假系统调用之手.
所以是不是系统调用不是两者的区别.

2. 缓冲的问题
cout 确实做了额外的缓冲, 但事实上, 没人知道 printf 或者 cout 之类的调用到底什么时候才会把内容输出. 从内核的角度看, 这牵扯到虚拟内存的管理, 换页机制等等, 要等内核把那些涉及到的页写出去了, 才真的写出去. 而什么时候内核才把那些涉及到的页写出去呢? 鬼知道.
哦 原来是这样哦,真是挺烦的啊 
谢谢!!!
发新话题