C中的隐式转换
作者:互联网
在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’
我希望条件运算符隐式地将b转换为a-0.5,float的类型.但这不会发生.我如何实现这种隐式演员?
理想情况下,我想避免静态强制转换或访问器方法,如浮动MyFloat :: getValue().
解决方法:
问题是有两次转换.编译器可以将a-0.5转换为MyFloat,也可以将b转换为float.只要您同时进行了两次转换,并且两者都没有明确标记,您就会始终获得这种模糊性.
标签:c,casting,implicit-conversion,conditional-operator 来源: https://codeday.me/bug/20190723/1510552.html