- 重文演算子
- 式の演算子
- Return 演算子
- if-else 条件演算子
- 三項演算子 ?:
- Switch 演算子
- while 反復演算子
- for 反復演算子
- do while 反復演算子
- Break 演算子
- Continue 演算子
- Matrix product operator
- new オブジェクト作成演算子
- delete オブジェクト解除演算子
三項演算子 ?:
三項演算子の一般的な形式は次の通りです。
式 1 ?式 2 : 式 3 |
1 番目のオペランド(式 1 )には bool 型の値の結果を持つ任意の式を使用出来ます。結果が true の場合、2 番目のオペランドによって設定された演算子、つまり「式 2 」が実行されます。
1 番目のオペランドが false の場合、3 番目のオペランド(式 3 )が実行されます。2 番目と 3 番目のオペランド、つまり「式 2 」と「式 3 」は同じ型の値を返し、これは void 型であってはいけません。条件演算子の実行結果は、式 1 の結果に応じて、式 2 または式 3 の結果となります。
//--- 一日の始値と終値の差を正規化
|
これは下記と同じです。
double true_range;
|
演算子の使用制限 #
この演算子は、「式 1 」の値に基づいて「式 2 」または「式 3 」の値を返さなければなりません。これらの式には、いくつかの制限があります。
- ユーザ定義型と基本データ型や列挙を混用してはいけません。ポインタにはNULLを使用出来ます。
- 値が基本型であれば、一番大きい型のオペレータが使用されます(型キャストをご参照ください)。
- 値のいずれかが列挙型で 2 つ目が数値型の場合、列挙型は int 型に置き換えられ、2 番目のルールが適用されます。
- 両方の値が列挙型の場合は、その型が同一である必要があり、演算子は列挙型となります。
ユーザ定義型(クラスまたは構造体)の制約事項は下記です。
- 型は同一であるか 2 つ目が 1 つ目からの派生型である必要があります。
- 型が同一(または継承)でない場合、子の型は暗黙的に親にキャストされ、演算子は親の型になります。
- オブジェクトとポインタを混用してはいけません。式は両方ともオブジェクトまたはポインタでなければいけません。ポインタにはNULL が利用出来ます。
注意事項
条件演算子の結果の型はプログラムのコンパイル時に定義されているので、条件演算子をオーバーロードされた関数の引数として使用する場合はご注意ください。この型は「式 2 」と「式 3 」の型のうち大きい方の型として定義されています。
例:
void func(double d) { Print("double argument: ",d); }
|
参照