Question

J'ai plusieurs fonctions dans un programme que j'écris qui utilisent une valeur que je dois calculer avec une fonction très lente.Cette valeur changera à chaque fois que le programme sera réexécuté, je ne peux donc pas simplement stocker une valeur statique.Ci-dessous un exemple.

void this_gets_called_frequently()
{
    static int value = slow_function();

    //do stuff with the above value
}

Mon principal problème ici n'est pas celui du programme qui ne fonctionne pas, mais plutôt celui de la propreté.Je ne veux pas vraiment initialiser une variable globale et y stocker la valeur, car elle ne changera pas une fois calculée.L'utilisation du mot-clé static de la manière indiquée ci-dessus appellerait-elle uniquement la fonction ci-dessus à calculer une seule fois ?Un mot-clé const ajouté ici serait-il utile ?

Merci à tous, la réponse a été parfaite !

Était-ce utile?

La solution

Oui, une initialisation de local static la variable se produira au plus une fois (même si je me souviens que certaines versions du compilateur pourraient avoir des problèmes de multithreading ici).const n'est pas obligatoire, dans ce cas c'est surtout une question de lisibilité et de goût.

Autres conseils

L'utilisation du mot-clé static de la manière indiquée ci-dessus appellerait-elle uniquement la fonction ci-dessus à calculer une seule fois ?

Oui, à la première invocation de this_gets_called_frequently

Un mot-clé const ajouté ici serait-il utile ?

Non.Mais ajoute const pour la valeur de la documentation.

L'utilisation peut utiliser les variables locales de fil de C ++ 11, si elles sont disponibles dans votre compilateur.Si vous êtes sous Windows, vous pouvez utiliser une API de généracodagetagcode similaire.C'est là depuis l'aube de Win32.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top