Vous ne savez pas si cela a déjà été demandé auparavant. En répondant à this very simple question, je me suis plutôt demandé ce qui suit. Considérez ceci:Existe-t-il une différence de performance pour déclarer une variable volumineuse dans une fonction comme static?
void foo()
{
int i{};
const ReallyAnyType[] data = { item1, item2, item3,
/* many items that may be potentially heavy to recreate, e.g. of class type */ };
/* function code here... */
}
Maintenant en théorie, les variables locales sont recréées chaque fois que le contrôle atteint la fonction, n'est-ce pas? C'est à dire. Regardez int i
ci-dessus - il va être recréé sur la pile à coup sûr. Qu'en est-il du tableau ci-dessus? Est-ce qu'un compilateur peut être aussi intelligent que d'optimiser sa création pour se produire une seule fois, ou ai-je besoin d'un modificateur static
ici de toute façon? Qu'en est-il si le tableau n'est pas const
? (OK, si ce n'est pas const
, il est probablement inutile de le créer une seule fois, car une réinitialisation à l'état par défaut peut être nécessaire entre les appels suite aux modifications effectuées pendant l'exécution de la fonction.)
question fondamentale, mais pour une raison quelconque, je réfléchis toujours. En outre, ignorez le "pourquoi voudriez-vous faire ceci" - ceci est juste une question de langue, pas appliquée à un certain problème ou conception de programmation. Je veux dire à la fois C et C++ ici. S'il y a des différences entre les deux concernant cette question, veuillez les décrire.
Grande réponse, prend du temps à lire! Donc, juste pour clarifier, un 'const' n'est pas une garantie du tout et je me trompe en le voyant comme presque identique à' const static' dans ce cas? Je suppose que c'est une vraie confusion dans ma tête. – iksemyonov
@iksemyonov: 'const' est juste une promesse de ne pas changer la valeur de l'objet. Cela n'implique même pas que deux instances de l'objet sont identiques. 'const int maintenant [3] = {hour(), minute(), second()};' – rici