Negativ -
Der Negativ-Operator dient der expliziten Negierung eines Elementes und wird in C auch mit unary minus
bezeichnet. Er wird stets VOR das zu kennzeichnende Element geschrieben, beispielsweise -value oder -1000.
|
|
Siehe auch Positiv-Operator +
Details
Der Negativ-Operator erwartet einen Operanden als rvalue und wird von rechts nach links abgearbeitet. Der Rückgabewert ist ein rvalue und hat denselben Typ wie der Operand.
Die semantische Bedeutung der Negierung ist die Multiplikation mit -1. Dies entspricht dem Zweierkomplement bei Integer-Typen wie signed int, signed short und signed char.
Folgende Konstrukte sind nur begrenzt sinnvoll, jedoch möglich:
|
|
Vorsicht: Folgende Zeile sieht zwar fast gleich aus, allerdings handelt es sich aufgrund des fehlenden Abstandes zwischen den den beiden - hier um den Decrement-Operator, welcher die Variable verändert:
|
|
Dieser Unterschied ist jedoch hinfällig, wenn der Negativ-Operator gemischt mit dem Positiv-Operator auftritt, da ein solcher Operator nicht existiert und somit als jeweils einzelne Positiv- und Negativ-Operatoren aufgelöst wird:
|
|
Überladen des Operators
Für eigene Klassen ist es notwendig, den Negativ-Operator zu definieren, denn die oben angesprochene Multiplikation mit -1 ist nur die semantische Bedeutung und wird nicht wirklich so übersetzt. Selbst kreierte Klassen müssten hierfür theoretisch ein 1-Element definieren, was jedoch in C++ so direkt nicht möglich ist, sondern nur über den Negativ-Operator. Wird somit der Negativ-Operator an einem Objekt aufgerufen, das keinem eingebauten Typ entspricht, erhält man den Fehler error: no match for 'operator-' in ...
Die Prototypen für das Überladen des Negativ-Operators sind die folgenden (Einschränkungen und Erläuterungen siehe Überladen von Operatoren):
|
|
Vorsicht ist geboten bei dem Prototypen ausserhalb der Klasse: Wenn er innerhalb der Klasse steht, wird er von den Compilern nicht als Fehler erkannt, da er dem Prototypen des Subtraktions-Operators entspricht.
Hier ein Beispiel, in dem eine Matrix mit dem Negativ-Operator direkt negiert werden kann:
|
|