gpt4 book ai didi

重载强制转换运算符时的 C++ 歧义

转载 作者:太空宇宙 更新时间:2023-11-04 16:14:12 29 4
gpt4 key购买 nike

发现:
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& 但是我希望它不要提示并选择第二个 (return const object&)

哦等等,刚刚得到我的答案。

最佳答案

尽管它们是不同的转换运算符(不仅仅是一个的重载),但通过删除第一个运算符上的 const 可以解决歧义。

因此:

operator T& () {
return *data;
}

operator const T& () const {
return *data;
}

或者,如果通过const 对象提供对指向数据的非const 访问确实有意义,那么就这样做

operator T& () const {
return *data;
}

关于重载强制转换运算符时的 C++ 歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24749391/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com