式1は、式の結果が
bool型であればどんな式でも使えます。
式1の結果がtrueの場合、式2の処理が実行されます。
式2の結果がfalseの場合、式3の処理が実行されます。
式2と式3は
void型以外の値を返す必要があります。
サンプルソース:
int tmp_int;
bool tmp_bool;
tmp_bool = true;
tmp_int = tmp_bool ? 1 : 2;
Print(tmp_int);
tmp_bool = false;
tmp_int = tmp_bool ? 1 : 2;
Print(tmp_int);
if ( tmp_bool ) tmp_int = 1;
else tmp_int = 2;
演算子の使用制限
「式1」の値に基づいて「式2」または「式3」のいずれかの値を返す必要があります。これらの式はいくつか制限があります。
シンプルな型とユーザー定義型と
列挙を混同してはいけません。
NULLはポインタの為に使用する事が出来ます。
値の型がシンプルの場合、オペレータは最大型が使われます(
型キャスト参照)。
いずれかの値が列挙で1つ目が数値型の場合、列挙はint型に置き換えられ、2番目のルールが適用されます。
両方の値が列挙の場合、その型が同一である必要がありオペレーターは列挙型になります。
ユーザー定義型(
クラスまたは
構造体)の制約事項:
型は同一である必要があります。または
派生である必要があります。
型が同一(継承)では無い場合、オペレーターは親の型になります。すなわち子の型が暗黙的に親の型でキャストされます。
オブジェクトとポインタを混同しないでください。両方の式はオブジェクトかポインタのいずれかでなければなりません。NULLはポインタの為に使用する事が出来ます。
注意:
条件演算子の結果の型は、プログラムのコンパイル時に定義されているので、
オーバーロード関数の引数に条件演算子を使用する場合は注意して下さい。
そしてこの型は、「式2」と「式3」の型の大きい方の型として定義されます。