const和重载运算符

时间:2016-01-16 10:30:02

标签: c++ operator-overloading subscript-operator

我有通用的地图对象。 我想重载operator [],所以map[key]返回键的值。 我制作了两个版本的下标运算符。

非常数:

ValueType& operator[](KeyType key){

const:

const ValueType& operator[]( KeyType&   key) const{

非const版本工作正常但是当我创建const Map时我遇到了问题。 我写的主要是:

     const IntMap map5(17);
     map5[8];

我收到了这些错误:

ambiguous overload for 'operator[]' (operand types are 'const IntMap {aka const mtm::MtmMap<int, int>}' and 'int')  


invalid initialization of non-const reference of type 'int&' from an rvalue of type 'int'   

1 个答案:

答案 0 :(得分:0)

有关歧义的错误消息反映了您的编译器将operator[]()作为匹配map5[8]的候选对象。两个候选人都同样好(或者不好,取决于你如何看待它)。

const版本无效,因为map5const

const版本要求使用无效的右值(文字const)初始化对KeyType的非8引用。根据错误消息,您的KeyTypeint

&版本的KeyType参数中删除const,或者将该参数设为const