首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现像ios_base::Init这样的初始化器的标准方法

实现像ios_base::Init这样的初始化器的标准方法
EN

Stack Overflow用户
提问于 2012-05-09 17:41:06
回答 1查看 371关注 0票数 2

在libstdc++中,<iostream> header 定义了ios_base::Init的一个实例,它的构造函数原子地增加了一个计数器,如果计数器为0,则初始化cin/cout/cerr。这保证cin/cout/cerr总是在#include <iostream>之后,在每个TU中初始化。

我希望实现一个具有与ios_base::Init相同行为的初始化器,也就是说,我希望确保在包含一些头之前,在将其用于另一个全局变量的构造函数之前,会立即初始化一些全局对象。但是,这需要使用原子操作。libstdc++使用GCC的扩展,这是不标准的:init.cc?view=markup

根据如何有效地使用std::原子,std::是执行原子操作的唯一标准方法,所以我需要在所有TU中的初始化器之前构造一个全局原子变量。要初始化它,我需要另一个初始化器来初始化它,以此类推,可悲的是,我需要进行无限递归。

所以我的问题是,什么是最好的,标准的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-09 18:24:22

标准原子变量有常量表达式构造函数,这意味着它们在静态初始化阶段(即编译时)被初始化。因此,使用std::atomic<int>之类的东西作为您的计数器是没有问题的。

也就是说,如果您的程序在main启动之前没有启动任何线程,那么您可能就不必担心这个问题了。

顺便说一下,您所描述的结构也称为漂亮计数器或Schwarz计数器。

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

https://stackoverflow.com/questions/10521263

复制
相关文章

相似问题

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