重载强制转换运算符时的 C++ 歧义
Posted
技术标签:
【中文标题】重载强制转换运算符时的 C++ 歧义【英文标题】:C++ ambiguity while overloading cast operator 【发布时间】:2014-07-15 03:28:58 【问题描述】:找到: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&
)
哦,等等,刚刚得到我的答案。
【问题讨论】:
【参考方案1】:即使它们是不同的转换运算符(不仅仅是一个的重载),也可以通过删除第一个上的 const
来解决歧义。
因此:
operator T& ()
return *data;
operator const T& () const
return *data;
或者,如果通过const
对象提供对指向数据的非const
访问确实有意义,那么就这样做
operator T& () const
return *data;
【讨论】:
【参考方案2】:别傻了。正如我所说,您可以将object&
或const object&
分配给const object&
,因此无论哪种情况,第一个转换运算符都足以完成这项工作。
我傻了。希望这对将来的人有所帮助!
【讨论】:
根据您想要的语义(const
容器保存的数据是否应该是可变的),将第一个重载设为非const
可能更有意义。以上是关于重载强制转换运算符时的 C++ 歧义的主要内容,如果未能解决你的问题,请参考以下文章