我有一个带有静态成员的类,它将使用相同类的私有静态函数进行初始化。
#include <iostream>
#include <string>
class A
{
public:
static std::string const s;
private:
static std::string make()
{
return "S";
}
};
std::string const A::s = A::make();
int main()
{
std::cout << A::s << std::endl;
// std::cout << A::make() << std::endl; // <-- Does not work
return 0;
}
我的问题是:这种行为是由哪条规则允许的?显然,注释部分不起作用,因为我不被允许从类外部访问私有函数。那么为什么在启动期间初始化私有静态成员是一个特殊情况呢?(另外一件事:这个规则的意图是什么?是为了允许这种精确的情况吗?)我知道还有其他机制可以初始化静态成员(比如这里:初始化私有静态成员)。但是在我的情况下,成员是const的,所以据我所知,唯一的设置方式是通过在定义位置进行直接初始化。