Warum gibt es in C / C ++ keinen || = Operator? [Duplikat]

8
  

Mögliche Duplikate:
& amp; & amp; = und || = operators

Siehe Titel. Diese Frage kann um alle logischen + Zuweisungsoperatoren erweitert werden. Um zu verdeutlichen: Ich spreche nicht von | = operator.

Ein anderes Beispiel: & amp; & amp; =

Danke.

Beispiel:

%Vor%     
kevinarpe 13.07.2011, 08:30
quelle

4 Antworten

13

Bei einer Vermutung, da sie nur für Bools sinnvoll wären, die zu spät zur Party gekommen sind

Selbst wenn Bools zu Beginn vorhanden wären, wären diese Operatoren nur von begrenztem Nutzen, da sie ohne Nebenwirkungen mit |= und &= mit booleschen Operanden identisch wären durch Zufall nicht boolen.

Wenn die vorgeschlagenen Betreiber auch einen Kurzschluss haben (nicht unangemessen, da || und && für eingebaute Typen sind), dann haben Sie auch eine zusätzliche Rechtfertigung für diese bei Vorhandensein von Nebenwirkungen.

Der einzige andere mögliche Grund, den ich mir vorstellen kann, wenn ich sie erlaube, wäre, wenn sie das Parsen / Kompilieren der Sprache wesentlich vereinfacht, aber das ist wahrscheinlich nicht der Fall, da sie für Nicht-Bool-Typen keinen Sinn ergeben. p>

Letztendlich sind sie nicht in der Sprache, weil niemand sich darum gekümmert hat, sie in die Sprache zu setzen. Daraus können wir schlussfolgern, dass keine dieser Rechtfertigungen ausreicht, um die Kosten für die Einreichung eines Vorschlags, dessen Umsetzung und Umsetzung zu rechtfertigen das Merkmal.

    
jk. 13.07.2011 08:33
quelle
8

Weil sie keinen Sinn ergeben würden. Die Definition von x op= y ist x = x op y , außer dass x nur einmal ausgewertet wird. Was bedeutet das mit einem kurzgeschlossenen Operator, der jeden seiner Operanden (wenn er sie bewertet) in bool umwandelt? Das Äquivalent von ||= könnte etwa lauten:

%Vor%

was sicherlich anders ist als die Interpretation anderer op= .

    
James Kanze 13.07.2011 08:47
quelle
3

Weil ihr Modus Operandi sehr verschieden ist.

Sehen Sie sich die Signaturen an:

%Vor%

Compounds-Operatoren existieren für Operatoren, die den gleichen Argumenttyp zurückgeben, die Operatoren && und || geben einen booleschen Wert zurück (oder werden zumindest erwartet), und daher ist es nicht sinnvoll, eine zusammengesetzte Version zu erstellen , außer vielleicht nur für booleans .

    
Matthieu M. 13.07.2011 08:59
quelle
3

Kein guter logischer Grund ... nur historischer Druck für Features.

Logische Operatoren sind normalerweise nicht als Einzel-CPU-Opcodes verfügbar, also sind sie nicht so billig oder grundlegend wie ihre bitweisen Gegenstücke. Ein logisches XOR wäre auch nett, vielleicht ^^ , dann ^^= .

Dennoch macht es eine zunehmende Anzahl von Operatoren immer schmerzhafter, benutzerdefinierte Drop-in-Typen mit einer eingebauten Semantik zu erstellen, und es gibt wenig realen Nutzen. Ich möchte sie immer noch sehen - diese Operatoren gibt es in einigen anderen Sprachen, wie Ruby, und ich habe sie bequem und ausdrucksstark gefunden.

    
Tony Delroy 13.07.2011 08:47
quelle

Tags und Links