【发布时间】:2016-11-29 18:05:52
【问题描述】:
我有一个带有静态成员的类。这将使用同一类的私有静态函数进行初始化。
#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,据我所知,设置它的唯一方法是通过在定义位置直接初始化。
【问题讨论】:
标签: c++ initialization language-lawyer static-methods static-members