重载强制转换运算符时C ++模糊

时间:2014-07-15 03:28:59

标签: c++ c++11

实测值:
Ambiguity while overloading the cast operator

C++ Operator Ambiguity

没有帮助

情况:

在容器类的主体内部,我有:

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&

哦等等,我的答案得到了解答。

2 个答案:

答案 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&,这样在任何一种情况下,第一个演员都足以胜任该工作。

傻傻的我。希望这有助于将来的某个人!