何时创建全局变量?

因为

我有一段这样的代码结构:

a.cpp:  
    #include "b.hpp"  
    const unsigned a =  create(1);


b.cpp:
    map<int, string> something; // global variable
    unsigned create(unsigned a){
        something.insert(make_pair(a, "somestring"));
        return a;
    }

现在,这引发了段错误,valgrind说尚未创建地图。它是如何工作的,我应该如何更改?

大狼

C ++没有定义在程序启动期间构造全局变量的顺序。a可以在something构造之前先进行初始化,这将导致上述问题。当您开始构造依赖于要初始化的其他全局变量的全局变量时,就会遇到经典的静态初始化顺序fiasco

解决上述情况的一种简单方法是something将其静态化并将其移入您的create函数中。

unsigned create(unsigned a)
{
    static map<int, string> something;
    something.insert(make_pair(a, "somestring"));
    return a;
}

这样可以确保something在首次调用时被创建create

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章