模糊转换为参考

时间:2014-09-03 11:38:23

标签: c++ operator-overloading ambiguous

为什么此处CL实例转换为const int&不明确?

struct CL
{
    operator const int&()
    {
    }
    operator int&()
    {
    }
};

void fnc(const int&)
{
}

int main()
{
    CL cl;
    fnc(cl);
}

有两种方式:
1)。 cl.operator const int&()会导致用户定义的转化 2)。 cl.operator int&()会导致用户定义的转化,然后是资格转换(int&const int&

第一种方式比第二种方式更好,不是吗?我看到标准,但什么也没找到。

1 个答案:

答案 0 :(得分:5)

这是因为在这种情况下,两种转换都适用(同样好)。也就是说,int&const int&都可以由const int&绑定。

如果你有:

,那么转换就不会有歧义
void fnc(int&)
{
}
相关问题