J'ai un gros fichier de Constants.h
fichier où environ 200 variables (principalement des tableaux) sont déclarées et initialisées. J'utilise un espace de noms.Trop de déclaration et d'initialisation dans le fichier d'en-tête C++
MÉTHODE 1:
//Constants.h
#ifndef CONSTANTS_H_
#define CONSTANTS_H_
namespace LibConstants
{
const int a = 12;
const std::string theme[2]; = {"themeA", "themeB"};
const int arr[2] = {1, 2};
// and around 200 more declarations with initialization
}
#endif
Ce fichier est .h
#include
dans presque tous les fichiers .cpp
, mais chaque fois que sont utilisées seules variables très minimes comme LibConstants::theme[0]
.
Mes méthodes fonctionnent bien mais n'attribue-t-elle pas de mémoire inutilement? Dois-je suivre l'approche, pour définir uniquement les variables dans le fichier .h
et initialiser dans .cpp
?
Comme dans le code ci-dessous: MÉTHODE 2:
//Constants.h
#ifndef CONSTANTS_H_
#define CONSTANTS_H_
namespace LibConstants {
std::string getMyTheme(int arg);
std::string getMyThemeName(int arg);
const int a;
const std::string theme[2];
const int arr[2];
// and around 200 more declarations with initialisation
};
#endif
dans le fichier Initialisation cpp
//Constants.cpp
#include LibConstants.h
using namespace LibConstants {
std::string getMyTheme(int arg) {
theme[2] = {"themeA", "themeB"};
return theme[arg];
}
std::string getMyThemeName(int arg) {
...
}
}
En utilisant comme
//HelloWorld.cpp
#include Constants.h
int main() {
//METHOD 1:
std::string a = LibConstants::theme[0]; // arg=0 is dynamic and is being read from localStorage in my case.
//METHOD 2:
std::string a = LibConstants::getMyTheme(0); //Here also arg=0 is dynamic.
...
}
Ici, l'allocation de mémoire inutile pour les variables inutiles ne se produira pas, sauf pour les tableaux qui sont déclarés comme const std::string st[2];
dans le fichier d'en-tête.
Ici, "arg = 0" est l'implication du temps d'exécution. Est-ce important si une variable ne dépend pas de l'exécution mais seulement de la compilation, auquel cas elle remplacera simplement la valeur de l'espace réservé dans le fichier .cpp
correspondant?
Veuillez me corriger partout où je me trompe.
Les constantes de temps de compilation vont au segment de données dans la plupart des implémentations, que vous les déclariez et que vous les initialisiez dans des fichiers d'en-tête ou de source. Par exemple, disons que vous avez 'int a [] = {/ * un grand tableau * /}'. 'a' n'est pas une constante mais son initialisation doit encore aller quelque part et le programme doit encore le charger. Donc, dans ce cas, je ne pense pas que cela fasse une différence matérielle. D'un autre côté, si une variable a besoin d'une exécution à l'initialisation, soit par le constructeur, soit par d'autres moyens. Il est préférable de l'intégrer dans une fonction et de la créer à la demande. –
@YanZhou Merci pour la réponse rapide. Donc, vous voulez dire, les deux méthodes ci-dessus sont presque les mêmes parce que les deux sont compiler le temps et ne consomme pas de la mémoire, mais remplace seulement leurs espaces réservés dans chaque fichier .cpp? – myDoggyWritesCode
Non. Donnez une minute pour composer une réponse. –