为什么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&
)
第一条路比第二条路好,不是吗?我看了《标准》,但什么也没找到。
这是因为这两种转换在此上下文中都适用(同样好)。也就是说,int&
和const int&
都可以被const int&
结合。
转换不会是模棱两可的,如果你有:
void fnc(int&)
{
}