C++ では、条件演算子で暗黙の変換を使用しようとしています。次の例を検討してください。
class MyFloat
{
public:
MyFloat(float val){m_val = val;}
operator float(){return m_val;}
protected:
float m_val;
};
int main(int argc, char **argv)
{
MyFloat a = 0.5f;
MyFloat b = 1.0f;
float x = true ? a-0.5f : b;
return 0;
}
コンパイラ エラーが発生します。
error: operands to ?: have different types ‘MyFloat’ and ‘float’
条件演算子が暗黙的に floatb
の型に変換されることを期待しています。a-0.5
しかし、これは起こりません。この暗黙のキャストを実現するにはどうすればよいですか?
理想的には、静的キャストや のようなアクセサー メソッドは避けたいと思いfloat MyFloat::getValue()
ます。