首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iostream对象cin、cout、cerr和clog是如何实现的?

iostream对象cin、cout、cerr和clog是如何实现的?
EN

Stack Overflow用户
提问于 2010-09-24 01:19:21
回答 1查看 2.3K关注 0票数 2

iostream对象cin、cout、cerr和clog是在iostream报头中声明的对象。

我知道,在某些编译器中,可能会在构造这些iostream对象之前尝试使用它们,因此在某些情况下,它们必须受到“静态初始化顺序失败”的影响。在那些使用std::cout等人总是安全的编译器中,这些对象实际上是如何构造的?它是否涉及到底层编译器的魔力,或者原则上是否都可以用标准的C++来完成?

cout等似乎要么是全局变量,要么是单例:为什么全局变量和单例通常被认为是邪恶的,但在这种特殊情况下似乎不是?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-24 01:22:47

没有编译器的魔力。

IIRC,标准实现是在头部中定义一个全局常量对象。在每个翻译单元中,包括该报头,创建一个这样的对象。它的构造函数递增计数器,析构函数递减计数器。当从0递增到1时,创建控制台流对象,当从1递减到0时,它们被销毁。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3780898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档