web-dev-qa-db-fra.com

Est-ce une mauvaise pratique de définir des constantes à l'aide de méthodes statiques de classe?

Au lieu d'utiliser #define ou const, je définis généralement les constantes à l'aide des méthodes statiques de classe comme suit:

//AppConstants.h
#include <string>
class AppConstants{
public:
    static int getMax();
    static std::string getPrefix();
};

//AppConstants.cpp
#include "AppConstants.h"
int AppConstants::getMax(){
    return 30;
}

std::string AppConstants::getPrefix(){
    return "myprefix";
}

Je le fais généralement lors de la création d'une application mobile, ce que je voudrais économiser le temps de compilation lorsque chaque fois changer la valeur pour le test. Est-ce une mauvaise pratique?

6
ggrr

Oui, et c'est inutile aussi. Vous pouvez déclarer des constantes dans les en-têtes et les définir dans les fichiers source tout comme les fonctions:

class AppConstants {
public:
  static const int Max;
  static const std::string Prefix;
};

const int AppConstants::Max = 30;
const std::string AppConstants::Prefix = "myprefix";

Surtout dans le cas de la chaîne, cela a l'avantage de ne pas en construire une nouvelle à chaque fois que vous y accédez.

Il présente également l'inconvénient d'être affecté par l'ordre d'initialisation globale non spécifié de C++, donc soyez prudent si vous utilisez les constantes de l'initialisation d'autres variables/constantes globales.

10
Sebastian Redl