与其他静态const成员初始化静态常量成员

Initializing static const member with other static const member

本文关键字:静态 成员 初始化 常量 const 其他      更新时间:2023-10-16

我有2个具有静态const成员的类普通班。看起来这样:A.H:

class A { 
public:
    static const std::string a;
};

A.CPP:

const std::string A::a = "hello";

b.h:

class B {
public:
    static const std::string b;
};

B.CPP:

const std::string B::b = A::a;

c.h:

class C {
public:
    static const std::string c;
};

c.cpp:

const std::string C::c = A::a;

问题是,由于静态成员在程序的开头初始化了静态成员,因此我无法初始化静态常量成员,并且在试图初始化B :: B :: b时,a :: a的值不可用和c :: c,所以我得到了细分故障。

我该怎么办来解决这个设计问题?

我建议使用单独的函数获取 string 执行初始化并避免初始化顺序fiasco:

const std::string initialize() {
    static const std::string initializer = "meow";
    return initializer;
}

然后,您可以按以下方式进行初始化:

class A {
    public:
        static const std::string a;
};
const std::string A::a = initialize();