Twitter und Facebook-Anbindung
X
Tweet Follow @twitterapi
!!! Anbindung an twitter und facebook öffnen !!!

Wenn Ihnen mein Online-Buch gefällt,
dann bedanken Sie sich doch mit einer kleinen Spende...

20.1.2 const Casting

20.1.2 const Casting

Hin und wieder steht man vor dem Problem, dass man einen konstanten Wert bzw. eine Variable oder Funktion, welche mit "const" qualifiziert wurde, in eine dynamische Variable überführen möchte oder muss. Hierfür gab es bisher keine Möglichkeit. Das s.g. const Casting bietet hier einen Ausweg. Aber Vorsicht! Diese Umwandlung ist nur vorübergehend! Mann darf anschließend den Wert nicht ändern, da man sonst den konstanten Speicherbereich beschädigt und das Programm somit abstürzen wird. Seien Sie sich dessen immer bewusst und verwenden Sie folgenden Mechanismus, nur im Notfall.

 1
 2
 3
 4
 5
					
const char*	pcstrWert1	= "Hallo Welt";
char*		pstrWert2;
pstrWert2			= const_cast<char*>(pcstrWert1);

printf("%s", pstrWert2);
					

Ausgabe:

Hallo Welt
		

In Zeile 1 erzeuge ich mir also einen konstanten String mit einem konstanten Inhalt. Jene Variable weiße ich dann in Zeile 3, mit Hilfe der "const_case" Funktion, einem Zeiger auf ein dynamischen String zu. Die Syntax sieht ein wenig merkwürdig aus, aber das liegt daran, dass es sich hier um ein Funktionstemplate handelt. Was das genau ist und warum man das so schreiben muss, werde ich im entsprechenden Kapitel erklären. Wichtig im Moment ist nur, dass man den gewünschten Ergebnistyp, in spitze Klammern vor den runden Klammern, angibt. Alle weiteren Typumwandlungen werden auf ähnlichen Funktionstemplates basieren und stehen auch erst ab C++ zur Verfügung.

Der "const cast" kann und wird für ganz üble Hacks benutzt. Es geht nämlich eigentlich weniger darum eine klassische Konstante so zu manipulieren, dass sie nicht mehr konstant ist. Vielmehr hebelt man damit den Mechanismus aus, welcher mit einem konstanten Funktionsparameter erzwungen werden soll. Angenommen Sie übergeben einer Funktion eine Variable als konstante Referenz. Mit dem Modifikator "const", will der Ersteller der Funktion Ihnen zeigen, dass er den Wert nicht manipuliert und normalerweise könnte er es auch nicht. Da es sich aber nicht um eine richtige Konstante handelt und somit eine Änderung theoretisch nicht den Speicher kaputt machen würde, kann man mit dieser Art der Typumwandlung, die Variable wieder beschreibbar machen. Sie merken also, dass man hier eigentlich nur hässliche Sachen machen kann und deswegen Finger weg!

Zum Seitenanfang
Zum Inhaltsverzeichnis

© Copyright by Thomas Weiß, 2009 - 2012