首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >碘流报头内部静态数据的使用

碘流报头内部静态数据的使用
EN

Stack Overflow用户
提问于 2016-11-10 12:57:42
回答 1查看 150关注 0票数 0

我在godbolt.org上四处游玩,并注意到编译器添加了一些带有包含iostream头的“空main()”的https://godbolt.org/g/lCBXF8

在研究了标准之后,我认为,如果还没有构造/初始化对象cincoutcerrclogwcinwcoutwcerrwclog,,就需要这些标准来构造和初始化它们。

N4606:§27.5.3.1.6

27.5.3.1.6类ios_base::Init ios::Init命名空间std { Class ios_base::Init { public: Init();~Init();私有:静态int init_cnt;// ios_base::Init };}

但是对于static数据,所有的标准都表示它计算class Init的构造函数和析构函数调用的数量,并且初始化为零。

2为了说明起见,本文将维护的数据显示为:(2.1) -静态int init_cnt,对初始化为零的类Init计算构造函数和析构函数调用数。

我不明白的是,static int init_cnt;在这里的用途是什么?为什么我们需要计算调用构造函数/析构函数的次数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-10 13:13:33

基于https://github.com/maniacbug/StandardCplusplus/blob/master/ios.cpp#L163,我认为,如果需要的话,在调用全局变量析构函数时,在结束时进行编程,可以正确地销毁cin、cout、cerr、clog、wcin、wcout、wcerr和clog。

来自http://www.csci.csusb.edu/dick/c++std/september/lib-iostreams.html

~Init(); 效果:摧毁类Init中的一个对象。函数从存储在init_cnt中的值中减去一个,如果结果存储的值为一个,则调用cout.flush()、cerr.flush()、clog.flush()、wcout.flush()、wcerr.flush()、wclog.flush()。

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

https://stackoverflow.com/questions/40528228

复制
相关文章

相似问题

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