У меня есть класс со статическим членом. Это будет инициализировано с помощью частной статической функции того же класса.
#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, насколько я знаю, единственный способ его установить - это прямое инициализация в месте определения.