cstdio流与iostream流? 我刚刚了解了 iSyBase::SycCyWiStdio函数的存在,它基本上允许您关闭(或如果已经关闭它)在C++中使用的代码> IOSWATE/流和CSTIDO 流,它是标准C.的一部分。 现在,我一直认为 StdOut,代码> STRRR 和 STDIN < /C> >基本上被封装在一组C++中的对象中。但如果它们必须相互同步,这将表明C++的iostream类不是C的stdin等的包装器
我被这搞糊涂了?有人能澄清C++的iostream和C的stdio是如何在不同的抽象层次上做完全相同的事情的吗?我以为他们是一样的cstdio流与iostream流? 我刚刚了解了 iSyBase::SycCyWiStdio函数的存在,它基本上允许您关闭(或如果已经关闭它)在C++中使用的代码> IOSWATE/流和CSTIDO 流,它是标准C.的一部分。 现在,我一直认为 StdOut,代码> STRRR 和 STDIN < /C> >基本上被封装在一组C++中的对象中。但如果它们必须相互同步,这将表明C++的iostream类不是C的stdin等的包装器,c++,c,stream,iostream,cstdio,C++,C,Stream,Iostream,Cstdio,我被这搞糊涂了?有人能澄清C++的iostream和C的stdio是如何在不同的抽象层次上做完全相同的事情的吗?我以为他们是一样的 它们是如何被同步的?我一直认为它们是相同的东西,一个包裹另一个,本质上。实际上stdout,stderr和stdin是操作系统的文件处理程序。和代码>文件> />结构C,以及 IoSturi类C++都是这些文件处理程序的包装器。iostream类和文件结构可能都有自己的缓冲区或其他需要相互同步的东西,以确保文件的输入或输出正确。好的,下面是我的发现 实际上,I/O最
它们是如何被同步的?我一直认为它们是相同的东西,一个包裹另一个,本质上。实际上
stdout
,stderr
和stdin
是操作系统的文件处理程序。和<>代码>文件> />结构C,以及STDIN
、STDIO
等都有可用的句柄(请参阅)。基本上,C++ C++代码> IoSoSsync\u with_stdio()
实际上会更改底层文件描述符。事实上,设计师们增加了一个新的设计,以确保老的C++ I/O与Windows 32使用的是使用句柄而不是整数的系统兼容。
注意,使用“代码> SycIsIdStdioOver()/Cyto>与基于现代C++模板的STL I/O
< P>不可能是一个绕在另一个上的包装器(可以双向工作)。您可以使用<代码> IoSturiS/<代码>实现<代码> STDIO < /代码>函数,反之亦然。或者可以完全独立地编写。 而且sync_with_stdio
保证了如果启用了这两个流,那么这两个流将同步。但是,如果用户真的想这样做,在禁用这两个流时,它们仍然可以同步
但是,如果一个是一个包装器,一个可能还有一个缓冲区,另一个不共享,例如,同步仍然是必要的。
< P> C++并没有对如何实现这些东西提出要求,只是在某些操作的影响是什么。对于<代码> <代码> vs.代码> <代码>功能这意味着一个可以包装另一个,两者本质上可以相同,或者它们要么完全独立(例如,对于用户定义的系统,不需要显式同步,并且有一个定义的机制来扩展文件*
)但我不知道有哪一个系统真正做到了这一点。让一个实现成为另一个实现的包装是可能的,在
方面实现
是一个典型的实现选择,尽管它有一个缺点,那就是它会给某些实现带来额外的成本
std::cout << "Hello ";
printf("%s", "world");
std::cout << "!\n";