Bedingungs-Operator ? :

Der Bedingungs-Operator gibt entsprechend einer gegebenen Bedingung entweder einen ersten oder zweiten Wert zurück. Dieser Operator ist eine Kurzform für eine mühsam zu schreibende if-else-Struktur. Die Bedingung steht dabei vor dem Fragezeichen ? und nach dem Fragezeichen steht der erste Wert worauf getrennt durch einen Doppelpunkt : der zweite Wert folgt.






odd
#include <stdio.h>

int main(){
  int test = 5;
  const char* a = (test % 2) ? "odd" : "even";
  printf("%s\n", a);
  return 0;
}

Details

Der Bedingungs-Operator erwartet drei Operanden als rvalues und wird von rechts nach links abgearbeitet. Der zweite und dritte Operand müssen denselben Typ besitzen. Der Rückgabewert ist ein rvalue, dessen Typ durch den zweiten und dritten Operanden festgelegt ist.

Der Bedingungs-Operator ist speziell geeignet für Zuweisungen, welche je nach Bedingung anders sein müssen. Ohne den Bedingungs-Operator müssten Zuweisungen wie im obigen Beispiel mühsam mit einer if-else-Struktur ausprogrammiert werden:

const char* a;
if(test % 2){a = "odd";}else{a = "even";}

Es ist dabei zu beachten, dass die zuzuweisende Variable in diesem Beispiel vorgängig deklariert werden musste. Bei Basistypen spielt dies nicht so eine Rolle. Wenn jedoch der Typ der zuzuweisende Variable eine Klasse ist, so muss hierfür erst der Standard-Konstruktor aufgerufen werden und danach innerhalb der if-else-Struktur der Zuweisungsoperator. Mittels des Bedingungsoperators kann direkt der gewünschte Konstruktor aufgerufen werden.

Vorsicht ist geboten bei der Verwendung von komplizierten Ausdrücken. Da der Bedingungs-Operator viel weniger prioritär behandelt wird als die meisten anderen Operatoren, ist es fast immer notwendig, Klammern zu setzen. Mehr Informationen darüber können bei der Operatorenklammerung nachgelesen werden.