Konstanten-Nur-Header-Datei C ++
Ein Programm mit dem ich arbeite, hat viele Konstanten, die gelten in allen Klassen. Ich möchte eine header-Datei " - Konstanten.h", und in der Lage sein, zu erklären, alle relevanten Konstanten. Dann in meinen anderen Klassen, kann ich nur #include "Constants.h
.
Ich habe es auf Arbeit gut mit #ifndef
... #define ...
syntax. Allerdings würde ich es vorziehen, verwenden die const int...
form von Konstanten. Ich bin mir nicht ganz sicher, wie Sie Sie aber.
Kommentar zu dem Problem
Können Sie erklären, was Sie nicht verstehen, über
const int
? Post Beispielcode, die nicht kompilieren, wenn das Ihre Frage? InformationsquelleAutor der Frage | 2012-08-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnte man einfach definieren eine Reihe von
const ints
in einer header-Datei:Dies funktioniert, da in C++ ein name im namespace-Gültigkeitsbereich (einschließlich der globalen namespace), der explizit deklariert const und nicht explizit deklariert werden extern interne Bindung, so dass diese Variablen würde nicht dazu führen, doppelte Symbole, wenn Sie miteinander verknüpfen übersetzung-Einheiten. Alternativ können Sie auch ausdrücklich erklären, die Konstanten als statische.
Dies ist mehr kompatibel mit C und besser lesbar für Menschen, die möglicherweise nicht vertraut mit C++ linkage Regeln.
Wenn alle Konstanten sind int-Werte, dann eine andere Methode, die Sie verwenden könnte, ist zu erklären, dass die Kennungen als enums.
Alle diese Methoden verwenden Sie nur eine Kopfzeile und ermöglichen dem deklarierten Namen als compile-Zeit-Konstanten. Mit
extern const int
und eine separate Implementierung-Datei verhindert, dass die Namen verwendet werden, die als compile-Zeit-Konstanten.Beachten Sie, dass die Regel, dass bestimmte Konstanten, die implizit interne Verlinkung hat gelten für Zeiger, genau wie die Konstanten anderer Typen. Die heikle Sache ist aber, dass die Kennzeichnung eines Zeigers als
const
erfordert die syntax ein wenig anders, dass die meisten Menschen verwenden, um Variablen anderer Typen const. Sie tun müssen:machen ein konstanter Zeiger, so dass die Regel gelten soll.
Beachten Sie auch, dass dies ist ein Grund, warum ich lieber konsequent setzen
const
nach der Art:int const
stattconst int
. Ich habe ebenfalls das*
neben der Variablen: d.h.int *ptr;
stattint* ptr;
.Ich wie zu tun diese Art von Sachen, weil Sie wider den Allgemeinen Fall, wie C++ funktioniert wirklich. Die alternativen (
const int
,int* p
) sind nur spezielle Gehäuse, machen einige einfache Dinge, die mehr lesbar. Das problem ist, dass, wenn Sie Schritt aus diesen einfachen Fällen, die spezielle Gehäuse-alternativen werden aktiv irreführend.So, obwohl die früheren Beispiele zeigen, wie die gemeinsame Nutzung von
const
ich würde wirklich empfehlen die Leute schreiben wie dieses:und
InformationsquelleAutor der Antwort bames53
Ich mag die namespace besser für diese Art von Zweck.
Option 1 :
Option 2 :
Und ich würde nie in einer Klasse zu halten, diese Art von HardCoded Const-Variablen.
InformationsquelleAutor der Antwort Manikanda raj S
Sie nicht verwenden können, z.B.
const int
in eine header-Datei, wenn es enthalten ist in mehreren Quell-Dateien. Das ist, weil dann die Variablen definiert werden, die in allen source-Dateien (translation units (technisch gesehen). Sie benötigen eine spezielle source-DateiConstants.cpp
dass tatsächlich definiert die Variablen, und dann haben die Variablen deklariert, die alsextern
in der header-Datei.Etwas wie diese header-Datei:
- Und dies in einer Quellcode-Datei:
InformationsquelleAutor der Antwort Some programmer dude
Anstatt eine Reihe von globalen Variablen, die Sie vielleicht erwägen, eine Klasse, die eine Reihe von öffentlichen, statischen Konstanten. Es ist immer noch global, aber auf diese Weise ist es eingewickelt in eine Klasse, damit Sie wissen, wo die Konstante ist aus und es soll eine Konstante.
Konstanten.h
Constants.cpp
Dann können Sie diesen wie folgt:
InformationsquelleAutor der Antwort Andrew Rasmussen