繁体   English   中英

C ++重载映射[]运算符

[英]C++ overload map [ ] operator

我有2个重载的运算符声明,需要帮助您理解。

template<class KEY, class T>
const T& Map<KEY, T>::operator [](const KEY& key) const { }

template<class KEY, class T>
T& Map<KEY, T>::operator [](const KEY& key) { }

第一个[]用于访问值/返回值,即std::cout<<m["x"]<<std::endl;

第二个[]用于赋值,即m["x"] = 1;

我的问题与第二[] 如果我要执行m["z"] = 10 ,那么如何存储10作为与键z关联的值? 查看函数声明,我只看到键,而不是值。

我试着做m_value = T(); ,但我不确定T()是什么。

谢谢

该函数返回一个引用:

template<class KEY, class T>
T& Map<KEY, T>::operator [](const KEY& key) { }
 ^ that means "reference"

这将是对存储在地图中的对象的引用。 分配给参考将分配给该对象。

区别在于const。 从理论上讲,您也可以将2nd用于输出(并且可能会这样做,因为它们基本上是具有相同参数的相同功能。但这不是您的问题:)

您的第二个[[]]所要做的就是让您访问存储在“ z”处的项目,使用“ =”运算符完成了赋值,此处未显示为重载。

因此,使用第二个“ []”运算符作为访问方法,使用标准版本的“ =”运算符来存储10。

希望这可以帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM