使用其他静态const成员初始化静态const成员

时间:2017-05-30 07:26:19

标签: c++ static const

我有2个带静态const成员的类,我希望它们是相同的,所以我使用其他类的其他静态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;

问题是我无法用其他静态成员初始化静态const成员,因为静态成员在程序运行开始时初始化,并且在尝试初始化B :: b时A :: a的值不可用和C :: c所以我得到了分段错误。

我该怎么做才能解决这个设计问题?

1 个答案:

答案 0 :(得分:3)

我建议使用单独的函数来获取字符串来执行初始化并避免初始化顺序惨败:

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();