我有一个静态成员的类。这将使用同一类的私有静态函数进行初始化。在静态成员初始化期间访问私有静态函数
#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;
}
我的问题是:因为哪个规则是允许的?显然,评论部分不起作用,因为我不允许从课外访问私人功能。那么为什么启动期间私有静态成员的初始化是一个特殊情况? (并在旁注:这条规则的意图是什么?是否允许这个确切的情况?)
我知道其他机制来初始化静态成员(如这里:Initializing private static members)。但在我的情况下,该成员是const,所以据我所知,设定它的唯一方法是通过定义处的直接初始化。
你是对的const。编辑了这个问题。谢谢。 –
我认为这会更清楚,因为“尽管静态数据成员是在名称空间范围(类定义之外)定义的,静态数据成员的初始化被认为是类的表征的一部分”。 (我使用“特征描述”,因为“类定义”在C++标准中有非常正式的含义。) –
@MartinBonner好。 – songyuanyao