gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:31:01 26 4
gpt4 key购买 nike

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

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

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

最佳答案

没有编译器魔法。

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

关于c++ - iostream 对象 cin、cout、cerr 和 clog 是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3780898/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com