Mam klasę ze statycznym elementem. Zostanie to zainicjowane przy użyciu prywatnej funkcji statycznej tej samej klasy.Dostęp do prywatnych funkcji statycznych podczas inicjowania elementu statycznego.
#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;
}
Moje pytanie brzmi: Z powodu której zasady jest to dozwolone? Oczywiście część z komentarzami nie działa, ponieważ nie mam dostępu do prywatnej funkcji spoza klasy. Dlaczego więc inicjowanie prywatnego statycznego elementu podczas uruchamiania specjalnego przypadku? (A na marginesie: jaka jest intencja tej reguły?) Czy to w tym dokładnie przypadku?)
Jestem świadomy innych mechanizmów inicjowania statycznego elementu (jak tutaj: Initializing private static members). Ale w moim przypadku członek jest const, więc o ile wiem, jedynym sposobem na jego ustawienie jest bezpośrednia inicjalizacja w miejscu definicji.
Masz rację co do const. Edytował pytanie. Dzięki. –
Myślę, że byłby jaśniejszy: "Inicjalizacja statycznego elementu danych jest uważana za część charakteryzacji klasy, nawet jeśli statyczny element danych jest zdefiniowany w zakresie przestrzeni nazw (poza definicją klasy)." (Użyłem "charakteryzacji", ponieważ "definicja klasy" ma bardzo formalne znaczenie w standardzie C++.) –
@MartinBonner Fine. – songyuanyao