c++ - 依赖关系下的静态初始化

标签 c++ static

以下代码是否安全(不保证静态初始化顺序?)。

在一些库中:

class A {
    A() : x_ = 0 {
    }

    int add() {
        return ++x_;
    }
};

namespace S {
    static A a_;
}

#define ADD(varname) \
    namespace S { \
        static int v_##varname = a_.add(); \
    } 

宏 ADD 将在多个地方使用。对于任何 ADD 宏使用,是否保证 a_ 将在 v_##varname 之前初始化?

最佳答案

如果你想保证你的情况有一个常见的技巧:

namespace S { 

A & getA() {
   static A a; 
   return a;
}

} // namespace S

static int v_name = getA().add();

关于c++ - 依赖关系下的静态初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7584532/

相关文章:

c++ - 访问与使用 TraceLoggingWrite 提供的事件关联的用户数据

c++ - 通过函数模板传递时无法从 0 构造指针

c++ - 如何使用 bool true 参数的函数更改数组的值

c++ - OpenCv 裁剪问题

c# - 如何从字符串 C# 初始化一个二维字符矩阵

c++ - 无法在 lambda 中捕获静态变量

java - 为什么要使类静态更改字体和背景颜色?

python 3 : check if method is static

c++ - 如何从该对象中获取静态对象的值?

c++ - 将没有定义的 static const int 的地址传递给模板是否合法?