我正在为我的数据结构类编写一个哈希表,我想在我的实现中添加一些语法糖。template <typename HashedObj, typename Object>Object & Dictionary<HashedObj, Object>::operator[](HashedObj & key){ return items.lookup(key);}当我执行诸如 cout 但是我怎样才能用括号进行赋值呢? 类似:dict["mykey"] = "something";不,这不是我家庭作业的一部分(没有双关语),我只是想更好地学习 C++。 (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 目前还不清楚你在这里问的究竟是什么。您提供的代码已经支持赋值。只需执行它并随意工作(或至少它应该编译)。使用重载的 [] 的赋值运算符的哪一侧完全没有区别。它在左侧 (LHS) 上的工作方式与在赋值的右侧 (RHS) 上的工作方式完全相同(或作为 << 的操作数,如您的原始帖子中所示)。您的 [] 返回对 Object 的引用,然后实际赋值由 Object 类型的赋值运算符处理,这意味着 [] 本身并未真正参与实际赋值。这里真正的问题是您希望 [] 在某些特殊情况下如何运作。如果您的 key 不在表中,会发生什么?在这种情况下,您的 Object 将返回什么 lookup 的引用?不可能从您发布的内容中找出答案。我看到它返回一个引用,所以返回 NULL 是不可能的。它是否为给定的键插入一个新的、空的 Object?如果是这样,那么您无需执行任何操作。您的 [] 已经完全准备好用于分配的 LHS。 (这就是 [] 中 std::map 的工作原理,顺便说一句)如果您的 lookup 返回对特殊“守卫” Object 的引用,您必须采取特殊步骤。您可能不想为“守卫”对象分配任何内容,因此您必须以某种方式“禁用”其分配运算符,然后您就完成了。其余的应该按原样工作。如果您的 lookup 在键不存在的情况下抛出异常,那么您必须决定当 [] 用于作业的 LHS 时这是否是您想要的。如果是这样,那么您无需执行任何操作。如果没有,那么将需要一些额外的工作......那么,如果您将一个不存在的 key 传递给 lookup 会发生什么?附言此外,使用 [] 参数或仅使用 lookup 参数声明 const HashedObj& (和 HashedObj )通常更有意义。非常量引用,就像你的例子一样,看起来很奇怪,在某些(实际上,在大多数)情况下可能会导致问题。我很惊讶它现在对你有用......关于c++ - 重载括号访问和赋值 C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1618524/ (adsbygoogle = window.adsbygoogle || []).push({});
10-10 00:44
查看更多