Der ternäre Operator C kann niemals einen Kurzschluss verursachen, da er nur einen einzelnen Ausdruck a (die Bedingung) auswertet , um einen durch die Ausdrücke b und c gegebenen Wert zu bestimmen , falls ein Wert zurückgegeben werden könnte.
Der folgende Code:
int ret = a ? b : c;
Es entspricht fast dem folgenden Code:
int ret;
if(a) {ret = b} else {ret = c}
Der Ausdruck a kann von anderen Operatoren wie && oder || gebildet werden Dies kann einen Kurzschluss verursachen, da sie möglicherweise zwei Ausdrücke auswerten, bevor sie einen Wert zurückgeben. Dies wird jedoch nicht als ternärer Kurzschlussoperator angesehen, sondern als Operator, der in der Bedingung wie in einer regulären if-Anweisung verwendet wird.
Aktualisieren:
Es gibt einige Debatten darüber, dass der ternäre Operator ein Kurzschlussoperator ist. Das Argument besagt, dass jeder Operator, der nicht alle Operanden auswertet, gemäß @aruisdante im Kommentar unten einen Kurzschluss macht. Wenn diese Definition gegeben wäre, würde der ternäre Operator kurzschließen, und in dem Fall, dass dies die ursprüngliche Definition ist, stimme ich zu. Das Problem ist, dass der Begriff "Kurzschluss" ursprünglich für eine bestimmte Art von Operator verwendet wurde, der dieses Verhalten zuließ, und dies sind die logischen / booleschen Operatoren, und der Grund, warum nur diese Operatoren vorhanden sind, werde ich zu erklären versuchen.
Nach dem Artikel Kurzschlussbewertung bezieht sich die Kurzschlussbewertung nur auf boolesche Operatoren, die in der Sprache so implementiert sind, dass das Wissen, dass der erste Operand den zweiten irrelevant macht, dies bedeutet, dass der Operator && der erste Operand falsch ist und für die || Da der Operator der erste wahre Operand ist , wird er in der C11-Spezifikation auch in 6.5.13 Logischer UND-Operator und 6.5.14 Logischer ODER-Operator angegeben.
Dies bedeutet, dass Sie das zu identifizierende Kurzschlussverhalten in einem Operator identifizieren müssen, der alle Operanden genau wie die booleschen Operatoren auswerten muss, wenn der erste Operand den zweiten nicht irrelevant macht. Dies steht im Einklang mit dem, was in einer anderen Definition für den Kurzschluss in MathWorks im Abschnitt "Logischer Kurzschluss" geschrieben ist, da der Kurzschluss von den logischen Operatoren stammt.
Da ich versucht habe, den C-ternären Operator zu erklären, der auch als ternär bezeichnet wird, wenn er nur zwei der Operanden auswertet, wertet er den ersten aus und wertet dann einen zweiten aus, wobei einer der beiden verbleibenden abhängig vom Wert des Erster. Es tut dies immer, es soll in keiner Situation alle drei bewerten, also gibt es auf keinen Fall einen "Kurzschluss".
Wie immer, wenn Sie sehen, dass etwas nicht stimmt, schreiben Sie bitte einen Kommentar mit einem Argument dagegen und nicht nur einer Abwertung, die die SO-Erfahrung nur verschlimmert, und ich glaube, wir können eine viel bessere Community sein als eine, die nur die Antworten ablehnt man stimmt nicht zu.