条件式 は、C++ で暗黙的に型 bool に変換される条件 (operand1)、条件が true に評価される場合に評価される式 (operand2)、および条件が値 false を持っている場合に評価される式 (operand3) を含む複合式です。
条件式には、2 つの部分で構成された 1 つの演算子があります。 ? 記号は、条件の後に続き、 : 記号は 2 つのアクション式の間に使用されます。 ? と : の間の式は、すべて 1 つの式として扱われます。
第 1 オペランドは、スカラー型を持つ必要があります。第 2 オペランドと第 3 オペランドの型は、 次のいずれかでなければなりません。
第 2 オペランドと第 3 オペランドは、ポインターまたはヌル・ポインター定数であってもかまいません。
2 つのオブジェクトが同じ型を持つが、必ずしも同じ型の修飾子 (volatile または const) で ない場合、この 2 つのオブジェクトは互換性があります。ポインター・オブジェクトが同じ型を持つか、void を指すポインタ ーの場合は、これらのポインター・オブジェクトには互換性があります。
第 1 オペランドが評価され、 その値によって 第 2 オペランドまたは第 3 オペランドを評価するかどうかが判別されます。
結果は、第 2 オペランドまたは第 3 オペランドの値になります。
2 番目または 3 番目の式が算術型になる場合、値に通常の算術変換を実行します。 次の表は、第 2 オペランドと 第 3 オペランドの型により結果の型がどのように決まるかを示します。
条件式には、その第 1 および第 3 オペランドについて、右から左へ結合順序が付けられます。左端のオペランドが最初に評価され、次に、残 りの 2 つのオペランドのいずれか 1 つだけが評価されます。次の式は同じです。
a ? b : c ? d : e ? f : g a ? b : (c ? d : (e ? f : g))
関連参照