Positiv +
Der Positiv-Operator dient der expliziten Positiv-Kennzeichnung eines Elementes und wird in C auch mit unary plus
bezeichnet. Er wird stets vor das zu kennzeichnende Element geschrieben, beispielsweise +value oder +999.
|
|
Siehe auch Negativ-Operator -
Details
Der Positiv-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 Positiv-Kennzeichnung ist die Multiplikation mit +1. Zumindest für die arithmetischen Typen ist somit klar, dass der Positiv-Operator keinerlei Wirkung hat, er ist kein Absolut-Operator, da er aus dem negativen Wert nicht einen positiven macht, sondern ihn nur mit +1 multipliziert. Für den Absolut-Wert ist die Funktion abs() zuständig.
Folgende Konstrukte sind wenig 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 Increment-Operator, welcher die Variable verändert:
|
|
Dieser Unterschied ist jedoch hinfällig, wenn der Positiv-Operator gemischt mit dem Negativ-Operator auftritt, da ein solcher Operator nicht existiert und somit als jeweils einzelne Positiv- und Negativ-Operatoren aufgelöst wird:
|
|
Der Positiv-Operator hat somit für den Programmierer in erster Linie nur kosmetischen Nutzen, da er Formeln und Zuweisungen übersichtlicher schreiben kann:
|
Überladen des Operators
Den Positiv-Operator zu überladen macht nur selten Sinn, da bei normalen Anwendungen kaum Fälle auftreten, bei denen eine Multiplikation mit +1 irgend etwas bewirkt. Für Ausnahmen in speziellen mathematischen Theorien sei auf Expertenwissen verwiesen. Es ist trotzdem notwendig, den 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 Positiv-Operator. Wird somit der Positiv-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 Positiv-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 Additions-Operators entspricht.
Ein mehr oder weniger sinnvolles Beispiel für das Überladen des Operators ist das folgende, wo eine Matrix bei Auftreten des Positiv-Operators auf eine positive Determinante getestet und bei Negativität eine Warnung ausgegeben wird:
|
|