[C++] Accès à la fonction statique privée lors de l'initialisation d'un membre statique


Answers

Question

J'ai une classe avec un membre statique. Ceci sera initialisé en utilisant une fonction statique privée de la même classe.

#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;
}

Ma question est la suivante: à cause de quelle règle est-ce permis? Clairement la partie commentée ne fonctionne pas, parce que je ne suis pas autorisé à accéder à une fonction privée de l'extérieur de la classe. Alors pourquoi l'initialisation du membre statique privé au démarrage est-elle un cas particulier? (Et sur une note de côté: quelle est l'intention de cette règle, est-ce pour permettre ce cas précis?)

Je connais d'autres mécanismes pour initialiser un membre statique (comme ici: Initialiser des membres statiques privés ). Mais dans mon cas, le membre est const, donc pour autant que je sache, la seule façon de le définir est l'initalisation directe au lieu de définition.




Links