objekt über const pointer verändern?
-
hallo, ich hab ein kleineres problem mit der const correctness.
ich habe in einer klasse einen pointer der constant auf einen speicherbereich zeigen soll,ich habs mit:
const T* Pointer;
versucht, aber das hatte zufolge, dass
Pointer->a=1;
nicht durchgeführt werden konnte.
wie kann ich nun dem compiler einerseits sagen, dass der pointer nicht verändert werden darf, aber das objekt auf welches der pointer zeigt verändert werden kann?
-
wie wäre es mit
T* const pointer; // const-Zeiger
const T *zeiger; T const *zeiger; // beides const-Objekte
-
const T * foo; // zeiger auf const Objekt T const * foo // const Zeiger auf Objekt const T const * foo // const Zeiger auf const Objekt
-
ui, da sging schnell, danke euch
aber noch eine frage, ich war grad auf humme sikkins seite,da wird in bezug auf const correctness von dem logischen zustand eines objektes gesprochen, aber was ist das?
-
SirLant schrieb:
const T * foo; // zeiger auf const Objekt T const * foo // const Zeiger auf Objekt const T const * foo // const Zeiger auf const Objekt
Nä...
const T * foo; // zeiger auf const Objekt T const * foo; // dito T * const foo; // const zeiger const T const * foo // zeiger auf doppelt const Objekt ;) const T * const foo; // const Zeiger und const Objekt
-
SirLant schrieb:
const T * foo; // zeiger auf const Objekt T const * foo // const Zeiger auf Objekt const T const * foo // const Zeiger auf const Objekt
für einen konstanten Zeiger muss der Stern vor const sein sonst ist es nur ein konstantes Objekt!
int main() { int a; int b; const int *const foo = &a; // const Zeiger auf const Objekt foo = &b; return 0; } //error C2166: L-Wert gibt ein konstantes Objekt an
das ist kein konstanter Zeiger:
int main() { int a; int b; const int const *foo = &a; //warning C4114: Der gleiche Typbezeichner wurde mehrmals verwendet foo = &b; return 0; }//ist kein Fehler also kann foo nicht konstant sein
(.Net 2002)
EDIT: zu spät
-
was ist denn ein "doppel const" objekt? das hab ich ja noch nie gehört...
-
otze schrieb:
was ist denn ein "doppel const" objekt? das hab ich ja noch nie gehört...
gibts eigentlich nicht...das sagt .Net dazu:
[Compiler Warning (level 1) C4114]
Der gleiche Typbezeichner wurde mehrmals verwendet
Ein Typbezeichner (const, volatile, signed oder unsigned) wird in einer Typdeklaration oder -definition mehrfach verwendet. Bei Verwendung der Microsoft-Erweiterungen (/Ze) wird eine Warnung, bei Einhaltung der ANSI-Kompatibilität (/Za) eine Fehlermeldung ausgegeben.
Beispiel
// C4114.cpp
volatile volatile int i; // C4114
-
löl, den Begriff habe ich mal schnell erfunden, ist natürlich unsinnig der Syntax.
-
ich war grad auf humme sikkins seite
Hume
von dem logischen zustand eines objektes gesprochen, aber was ist das?
Als logischen Zustand bezeichnet man für gewöhnlich den Zustand, der von außen wahrnehmbar ist (und für die Außenwelt relevant ist), sprich der sich über die öffentliche Memberfunktionen abfragen lässt.
Falls dir das als Antwort nicht genügt, kannst du deine Frage vielleicht etwas konkretisieren?
-
das steht ja in etwa so auf deiner page, aber damit kann ich ehrlichgesagt wirklich nichts anfangen.
ich brauch für sowas immer code ums zu verstehen...hmm
class test{ private: int size; public: int getsize(){return size;}//fragt man hier den logischen zustand ab? void setsize(int i){ size=i;}//verändert man hiermit den logischen zustand,oder nur den physischen? }: