char * const?
-
Im oberen Fall entspricht:
typedef char *string_;
const string_ foo = "abc";
folgendem:
char * const foo = "abc";
Du hast mit typedef einen Typ vereinbart und im Code eine konstante Variable von diesem Typ.
-
Also erstmal: Ich bevorzuge folgende Schreibsweise:
char const * const a;Das liest sich schön von hinten nach vorne:
aist ein konstanter Zeiger auf konstantechar.
Lässt man das eine oder andereconstweg, so kann man auch aus dem Satz oben einfach das jeweilige "konstant" rausnehmen.
Zu der Frage, wieso die übergabe eineschar * constgeht:
Der Zeiger wird als Wert übegeben, also als Kopie.
Folgendes geht ja auch:void f(int c); int const a = 10; int b = a; //b ist eine Kopie von a f(a); //c in der Funktion ist eine Kopie von aDas ist genau das Gleiche.
-
Tachyon schrieb:
void f(int c); int const a = 10; int b = a; //b ist eine Kopie von a f(a); //c in der Funktion ist eine Kopie von aDas ist genau das Gleiche.
TE hat offensichtlich erwartet, daß
typedef char *string_;
const string_ foo = "abc";gleichbedeutend ist mit:
char const * foo = "abc";
Wie schon gesagt, entspricht es aber:
char * const foo = "abc";
-
Jepp is nun klar.
Aber merkwürdig, wenn der Präprozessor doch einfach nur ersetzt, wieso sieht es dann so unterschiedlich aus?
-
Seikilos schrieb:
Jepp is nun klar.
Aber merkwürdig, wenn der Präprozessor doch einfach nur ersetzt, wieso sieht es dann so unterschiedlich aus?
Wo ersetzt da der Präprozessor?
-
Das typedef?
Nicht?
-
Seikilos schrieb:
Das typedef?
Nicht?Da hat der Präprozessor keine Aktien drin.
-
Aber ich krieg dann das typedef niemals mehr const ohne ein weiteres typedef?
-
Seikilos schrieb:
Aber ich krieg dann das typedef niemals mehr const ohne ein weiteres typedef?
Schau Dir mal die Iteratoren aus der STL an. Da gibt es zu jedem mutable Iterator auch immer eine const-Version.
Beispiel:std::vector<T>::iterator std::vector<T>::const_iteratorFür Deinen Pointer auf const typedef musst Du das ähnlich machen:
typedef T * MyTPointerType; typedef T const * MyConstTPointerType;
-
Seikilos schrieb:
wenn der Präprozessor doch einfach nur ersetzt, wieso sieht es dann so unterschiedlich aus?
Das verwechselst Du mit #define