static const
-
hey
bei tmp ist es ja gang und gebe folgendes zu schreiben:
template<typename T> struct SomeTmpStuff { static const bool Value = true; };aber wenn ich statische datenelemente mache teilweise, dann muss ich diese noch ausserhalb der klasse definieren. etwa so:
struct Class { static const std::string Test = "hello!"; }; const std::string Class::Test;also kann mir jemand erklären, wann genau man es alleine innerhalb der klasse belassen kann und wann man es ausserhalb nochmals hinschreiben muss?
mfg
-
Das ist nur für integrale Datentypen möglich und auch dann nur, wenn man niemals die Adresse von ihnen benötigt.
Das erklärt auch gleich, warum es für nicht-integrale Typen nicht möglich ist: Klassen brauchen den this-Zeiger, also eine Instanz. Nun würde also die Instanz in jeder Übersetzungseinheit angelegt und würde die One-Definition-Rule verletzen.
-
und wie ist das mit pod-datentypen?
-
Du scheinst Dich doch auszukennen, wenn Du schon mit "pod" ankommst - ich verstehe nicht, warum Du Dich mit so einer Frage hierher wendest, statt kurz im Internet zu suchen...
-
Das geht bei ganzzahligen und Aufzählungstypen (mit der in-class Initialisierung) und solange du nicht ihre Adresse benutzt (ohne out-of-class Definition).
Siehe:
http://www.stroustrup.com/bs_faq2.html#in-classedit: Viel zu langsam. Wieder zu viele Tabs gleichzeitig offen gehabt...
-
danke für den link. jetzt ist es mir klarer.