实测值:
Ambiguity while overloading the cast operator
和
没有帮助
情况:
在容器类的主体内部,我有:
operator T& () const {
return *data;
}
operator const T& () const {
return *data;
}
意图是:
container<object> test = new object;
object& whatever = test; //<--uses (T&) cast
const object& other = test; //<--uses (const T&) cast
然而,第二个导致错误,因为它是不明确的。
我完全明白为什么编译器会抱怨,可以将object&
和const object&
分配给const object&
但是我希望它不要抱怨并选择第二个(返回const object&
)
哦等等,我的答案得到了解答。
答案 0 :(得分:5)
即使它们是不同的转换运算符(不只是一个的重载),通过删除第一个上的const
来解决歧义。
因此:
operator T& () {
return *data;
}
operator const T& () const {
return *data;
}
或者,如果通过const
对象提供对指向数据的非const
访问权限是非常有意义的,那么只需执行
operator T& () const {
return *data;
}
答案 1 :(得分:0)
别傻了。正如我所说,您可以为object&
分配const object&
或const object&
,这样在任何一种情况下,第一个演员都足以胜任该工作。