006
30.01.2007, 02:39 Uhr
Pablo
Supertux (Operator)
|
Zitat von tobias: |
achso... das ist jetzt aber nur für chars... wenn ich aber diese strings also:
|
nein, das hat mit chars nicht zu tun.
Wenn du eine Funktion
C++: |
void foo(const datentype* var, ...);
|
hast, dann teilst du quasi mit, dass die Funktion foo den Inhalt des Speichers, auf den man mittels 'var' zugreift, nicht verändert wird. Und das ist gut so, weil sonst kann es schlimme Folgen haben.
Hier z.b.
C++: |
int machewas(char *x) { ... /* hier unbekannt, könnte sowas stehen wie: */ x[0] = toupper(x[0]); ... }
|
Wenn ich aufrufe:
dann gibt es einen dicken Fehler. Bei einer solchen Funktion, deren Inhalt ich nicht kenne, würde ich nie, "Hallo" übergeben, sondern einen Buffer, der überschrieben werden kann, also
C++: |
char buffer[] = "Hallo"; machewas(buffer);
|
Wenn aber machewas so definiert wäre:
C++: |
int machewas(const char *x) { ... /* hier unbekannt, sowas wie x[0] = toupper(x[0]); ist aber nicht drin */ ... }
|
dann weiß ich mit 100% Sicherheit, dass der Inhalt nicht verändert wird, also kann ich sicher
ausführe.
Aber wie gesagt, die Benutzung des const beschränkt sich nicht auf char*. -- A! Elbereth Gilthoniel! silivren penna míriel o menel aglar elenath, Gilthoniel, A! Elbereth! Dieser Post wurde am 30.01.2007 um 02:40 Uhr von Pablo editiert. |