it-swarm.com.de

Ist es eine schlechte Praxis, Konstanten mit statischen Methoden der Klasse zu definieren?

Anstatt #define oder const zu verwenden, definiere ich Konstanten normalerweise mit statischen Klassenmethoden wie folgt:

//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";
}

Ich mache dies normalerweise beim Erstellen einer mobilen App, bei der ich die Kompilierungszeit sparen möchte, wenn ich den Wert für das Testen jedes Mal ändere. Ist es eine schlechte Praxis?

6
ggrr

Ja, und es ist auch unnötig. Sie können Konstanten in Headern deklarieren und wie Funktionen in Quelldateien definieren:

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

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

Insbesondere im Fall der Zeichenfolge hat dies den Vorteil, dass nicht bei jedem Zugriff eine neue Zeichenfolge erstellt wird.

Es hat auch den Nachteil, dass es von der nicht angegebenen globalen Initialisierungsreihenfolge von C++ betroffen ist. Seien Sie also vorsichtig, wenn Sie die Konstanten aus der Initialisierung anderer globaler Variablen/Konstanten verwenden.

10
Sebastian Redl