|
三項演算子とデータ型の問題
三項演算子を使うときはデータ型をそろえる必要があります。たとえば次のプログラムはコンパイルエラーになります。
long lg;
short st;
char *cp = NULL;
cp = (char *)(true ? &lg : &st); // コンパイルエラー
|
これは、三項演算子の演算結果として何らかのデータ型の値が返りますが、このデータ型が一意に決まらないといけないからです。(long
*とshort *は暗黙的に変換できない)
この場合は次のように明示的にキャストしてデータ型を合わせれば、エラーを回避することができます。
long lg;
short st;
char *cp = NULL;
cp = (true ? (char *)&lg : (char *)&st);
|
また、データ型が暗黙的に変換できる場合はエラーとはならず、暗黙的に変換されます。しかしこれが思わぬ問題を引き起こすこともあるので、三項演算子を使うときはデータ型を合わせるようにしましょう。
|