Logisch OR ||
Der Logisch-OR-Operator verknüpft zwei boolsche Werte nach den Regeln des logischen OR: false OR false ergibt false und alle anderen Kombinationen ergeben true.
|
|
Siehe auch bool-Typ, Bitweise-OR-Operator |, Logisch-AND-Operator &&, Logisch-NOT-Operator !
Details
Der Logisch-OR-Operator erwartet zwei Operanden als rvalues und wird von links nach rechts abgearbeitet. Der Rückgabewert ist ein rvalue, in C ein Integer-Typ, in C++ ein boolscher Typ.
Der Operator ist zulässig für boolsche Werte, Integer-Werte, Fliesskommawerte sowie Pointer. Zwar ist dieser Operator bereits in C verfügbar, jedoch sind der Typ bool sowie die Wahrheitswerte true und false erst ab C++ verfügbar. In C wird für den Wert false der Integer-Wert 0, für true ein Integer-Wert ungleich 0 (normalerweise 1) verwendet.
Der Rückgabewert des Operators kann nur entweder true oder false (oder die entsprechenden Integer-Werte in C) sein. Im Gegensatz dazu gibt der Bitweise-OR-Operator stets einen Integer-Wert zurück.
Der Unterschied zwischen der logischen und der bitweisen Variante des OR-Operators ist für Einsteiger in die Sprache manchmal schwer verständlich. Der Unterschied ist: Die logische Variante verknüpft 1-Bit Werte, die bitweise Variante verknüpft mehrere Bits von Werten. Selbst bei erfahrenen Programmierern kommt es vor, dass man aufgrund der ähnlichen Schreibweise (|| oder |) aus Versehen und ohne es zu merken den falschen Operatoren verwendet. Da zudem in gewissen Fällen die beiden Operatoren dieselben Ergebnisse liefern, ist dies eine schwer aufzufindende Fehlerquelle, die manchmal einige Stunden Fehlersuche benötigt.
Überladen des Operators
Der Logisch-OR-Operator hat grundsätzlich die semantische Bedeutung einer boolschen OR-Verknüpfung. Allerdings ist auch jegliche andere Semantik vom Programmierer definierbar. Trotzdem sei angemerkt, dass der Logisch-OR-Operator sehr selten überladen wird, insbesondere, da oftmals anstelle der expliziten Ausprogrammierung eines logischen Vergleiches ein Casting-Operator nach bool überladen wird, worauf mit dem eingebauten Logisch-OR-Operator weiterprogrammiert werden kann.
Die Prototypen für das Überladen des Logisch-OR-Operators sind die folgenden (Einschränkungen und Erläuterungen siehe Überladen von Operatoren):
|
|
Im folgenden Beispiel wird je eine Klasse für einen Punkt und eine Linie in der zweidimensionalen Ebene präsentiert. Der überladene Logisch-OR-Operator gibt Antwort auf die Frage, ob Linien parallel zueinander liegen. Es sei angemerkt, dass die hier vorliergende Ausprogrammierung nur illustrativen Charakter hat und numerisch keinesfalls stabil ist.
|
|