【发布时间】:2009-10-24 17:05:13
【问题描述】:
我正在为我的数据结构类编写一个哈希表,我想在我的实现中添加一点语法糖。
template <typename HashedObj, typename Object>
Object & Dictionary<HashedObj, Object>::operator[](HashedObj & key)
{
return items.lookup(key);
}
当我执行 cout 但是我怎样才能用括号做赋值呢? 像:
dict["mykey"] = "something";
不,这不是我家庭作业的一部分(不是双关语),我只是想更好地学习 C++。
【问题讨论】:
-
顺便说一句,当您声明
Dictionary用于字符串键时,您使用哪种类型作为HashedObj?就像上面示例中的"mykey"。 -
因为您正在返回一个引用,所以赋值运算符应该按照您期望的方式工作。唯一的问题是lookup() 找不到键,那你怎么办?
-
在我的测试中,我使用字符串: Dictionary
dict; -
@Matt:在这种情况下,您的代码不应该编译。当您执行
dict["mykey"]时,编译器会创建一个临时的string对象。临时对象不能传递给operator[],因为后者接受非常量引用作为参数。非常量引用不能绑定到临时。如果它编译,那只是因为你的编译器允许它作为扩展(我猜是 MSVC++)。同样,您的operator[](和lookup函数)应使用const HashedObj&参数声明。 -
我不清楚,我实际上并没有运行 dict["mykey"] 我运行
string key = "mykey"; dict[key] = "something"。我认为他们会做同样的事情,所以我在我的问题中简化了它。显然,我不知道我在做什么 :) 我尝试了 dict["mykey"] 并且它无法编译。现在我知道为什么了。谢谢。现在事情开始变得有意义了。