我有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()是什么。
谢谢
答案 0 :(得分:1)
该函数返回一个引用:
template<class KEY, class T>
T& Map<KEY, T>::operator [](const KEY& key) { }
^ that means "reference"
这将是对存储在地图中的对象的引用。分配给引用将分配给该对象。
答案 1 :(得分:0)
区别在于const。从理论上讲,你也可以使用第二个输出(也可能是因为它们基本上都是相同参数的相同函数。但这不是你的问题:)
您的第二个“[]”正在执行的操作是让您访问存储在“z”的项目,使用“=”运算符完成分配,您在此处未显示过载。
因此,使用第二个“[]”运算符作为访问方法,使用标准版本的“=”运算符存储10。
希望这有帮助